我正在尝试为项目中的一些 cpp 文件编写单元测试用例。
这里的场景是:
我有一个 cpp 文件,只定义了一个公共方法,然后又调用私有方法。
这里私有方法在公共方法中作为回调方法被调用。我如何在这里测试私有方法。我将对回调指针进行模拟,但我不知道如何调用私有方法。
请给我一些建议,如何在这种情况下调用私有方法而不更改源代码。
这是前:
buttonListenerList <<
sourceButton->addButtonActionCallback(std::bind(&AudioSource::buttonCallback, this, _1, _2));
这种和平的代码是在公共方法中定义的。现在AudioSource::buttonCallback
是一个私有方法。如何确保通过调用公共方法来调用这个私有方法。
如果,(您在评论中回答是)sourceButton
可以被嘲笑 - 然后期待addButtonActionCallback
被调用 - 并存储传递的std::function<>
arg.
就像下面的示例一样(将 ... 替换为真实类型):
struct TestSuite : public ::testing::Test {
... sourceButtonMock;
std::unique_ptr<...> objectUnderTest;
void SetUp() override;
std::function<...> sourceButtonActionCallback;
};
using namespace ::testing;
void TestSuite::SetUp()
{
EXPECT_CALL(sourceButtonMock, addButtonActionCallback(_))
.WillOnce(SaveArg<0>(&sourceButtonActionCallback);
objectUnderTest = std::make_unique<...>(sourceButtonMock);
}
将此回调存储在sourceButtonActionCallback
成员变量 - 你可以在任何你想要的地方自由调用它:
TEST_F(TestSuite, shallDo...OnSourceButtonClick)
{
// prerequisites
ASSERT_NE(sourceButtonActionCallback, nullptr);
// Expecteations
...
// action
sourceButtonActionCallback(...);
// post-assertions
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)