如何在谷歌测试中测试方法,使用std::function

How to test method in google test, using std::function?

本文关键字:使用 std 测试方法 function 谷歌 测试      更新时间:2023-10-16

我想在类 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);
    }
};

我有一个模拟课:

类运行模拟{公共: MOCK_METHOD1(运行,无效(整数));};

下面我有一个测试用例:

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()"中从模拟类"RunMock"转移方法"运行"。我想这样做,因为我想在UecSimplePortTestSuite.testForwardMessage中"EXPECT_CALL(*m_runMock,run(_));"来测试"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

不会做你的事情,这是一个编译错误。您可以阅读此移位 QA 以及此处如何使用指向成员函数的指针。