如何使用 std::function 在 google 测试中测试方法?
How to test method in google test, using std::function?
我想在 class 中测试方法 "methodToTest" A:
typedef std::function F_global;
struct A
{
F_global m_F_global;
A(F_global m_F_global) : p_F_global(m_F_global) {}
void methodToTest()
{
m_F_global(5);
}
};
我有一个模拟class:
class RunMock
{
public:
MOCK_METHOD1(运行, void (int));
};
下面我有一个测试用例:
class TestClass : public testing::Test
{
protected:
void SetUp();
std::unique_ptr<A> m_aa;
std::unique_ptr<RunMock> m_runMock;
};
void UecSimplePortTestSuite::SetUp()
{
m_aa = make_unique<A>(m_runMock->run);//IT DOESN'T WORK I DON'T KNOW HOW TO FORWARD A METHOD run from RunMock to constructor
}
TEST_F(UecSimplePortTestSuite, testForwardMessage)
{
EXPECT_CALL(*m_runMock, run(_));
m_aa->methodToTest();
}
一般我不知道如何从 Mock class "RunMock" 中调用方法 "run" in "UecSimplePortTestSuite::SetUp()"。我想这样做,因为
我想 "EXPECT_CALL(*m_runMock, run(_));" 在 UecSimplePortTestSuite.testForwardMessage 中测试 "methodToTest()"。
我认为使用 lmbda、std::boost::bind 或类似的东西可能是个好主意。
您可以在 SetUp()
中将 lambda 传递给 A
的构造函数:
m_runMock.reset( new RunMock );
m_aa.reset( new A( [&](int value){ m_runMock->run(value); } );
这个:
m_runMock->run
不会做你想做的事,是编译错误。您可以阅读 this parashift QA and here 如何使用指向成员函数的指针。
我想在 class 中测试方法 "methodToTest" A:
typedef std::function F_global;
struct A
{
F_global m_F_global;
A(F_global m_F_global) : p_F_global(m_F_global) {}
void methodToTest()
{
m_F_global(5);
}
};
我有一个模拟class:
class RunMock { public: MOCK_METHOD1(运行, void (int)); };
下面我有一个测试用例:
class TestClass : public testing::Test
{
protected:
void SetUp();
std::unique_ptr<A> m_aa;
std::unique_ptr<RunMock> m_runMock;
};
void UecSimplePortTestSuite::SetUp()
{
m_aa = make_unique<A>(m_runMock->run);//IT DOESN'T WORK I DON'T KNOW HOW TO FORWARD A METHOD run from RunMock to constructor
}
TEST_F(UecSimplePortTestSuite, testForwardMessage)
{
EXPECT_CALL(*m_runMock, run(_));
m_aa->methodToTest();
}
一般我不知道如何从 Mock class "RunMock" 中调用方法 "run" in "UecSimplePortTestSuite::SetUp()"。我想这样做,因为 我想 "EXPECT_CALL(*m_runMock, run(_));" 在 UecSimplePortTestSuite.testForwardMessage 中测试 "methodToTest()"。 我认为使用 lmbda、std::boost::bind 或类似的东西可能是个好主意。
您可以在 SetUp()
中将 lambda 传递给 A
的构造函数:
m_runMock.reset( new RunMock );
m_aa.reset( new A( [&](int value){ m_runMock->run(value); } );
这个:
m_runMock->run
不会做你想做的事,是编译错误。您可以阅读 this parashift QA and here 如何使用指向成员函数的指针。