gpt4 book ai didi

c++ - 如何使用 std::function 在谷歌测试中测试方法?

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:44 27 4
gpt4 key购买 nike

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

我有一个模拟课:

类 RunMock{民众: MOCK_METHOD1(运行,无效(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()”中的模拟类“RunMock”转移一个方法“run”。我想这样做,因为我想“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 QAhere如何使用指向成员函数的指针。

关于c++ - 如何使用 std::function 在谷歌测试中测试方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191325/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com