如何在google test中测试方法,使用std :: function?

时间:2015-01-28 11:38:20

标签: c++ unit-testing testing googletest googlemock

我想测试方法" 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或类似的东西。

1 个答案:

答案 0 :(得分:0)

您可以将lambda传递给ASetUp()的构造函数:

m_runMock.reset( new RunMock );
m_aa.reset( new A( [&](int value){ m_runMock->run(value); } );

这:

m_runMock->run

不会做你喜欢的事情,这是一个编译错误。您可以阅读this parashift QAhere如何使用指向成员函数的指针。