我想测试方法" 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);
}
};
我有一个模拟课程:
类RunMock { 上市: MOCK_METHOD1(run,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();
}
一般来说,我不知道如何转移方法&#34;运行&#34;来自Mock class&#34; RunMock&#34;在&#34; UecSimplePortTestSuite :: SetUp()&#34;。我想这样做,因为 我想&#34; EXPECT_CALL(* m_runMock,run(_));&#34;在UecSimplePortTestSuite.testForwardMessage中测试&#34; methodToTest()&#34;。 我认为好主意可能是使用lmbda,std :: boost :: bind或类似的东西。
答案 0 :(得分:0)
您可以将lambda传递给A
中SetUp()
的构造函数:
m_runMock.reset( new RunMock );
m_aa.reset( new A( [&](int value){ m_runMock->run(value); } );
这:
m_runMock->run
不会做你喜欢的事情,这是一个编译错误。您可以阅读this parashift QA和here如何使用指向成员函数的指针。