首页 文章

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

提问于
浏览
1

我想在A类中测试方法“methodToTest”:

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 RunMock {public: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();
}

一般来说,我不知道在“UecSimplePortTestSuite :: SetUp()”中如何从Mock类“RunMock”传输方法“run” . 我想这样做,因为我想“EXPECT_CALL(* m_runMock,run(_));”在UecSimplePortTestSuite.testForwardMessage中测试“methodToTest()” . 我认为好主意可能是使用lmbda,std :: boost :: bind或类似的东西 .

1 回答

  • 0

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

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

    这个 :

    m_runMock->run
    

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

相关问题