例如:
Production.cpp
int func1()
{
return 7;
}
void func2()
{
printf("func2");
}
void productionCode()
{
int x = func1();
if(x==7) func2();
}
TestProduction.cpp
int func1()
{
return mock().actualCall("func1").
returnIntValue();
}
void setExpFunc1(int x)
{
mock().expectOneCall("func1")
andReturnValue(x);
}
TEST(testGroupSample, testMockFunc1)
{
setExpFunc1(8);
// this will call mock func1()
productionCode();
}
TEST(testGroupSample, testRealFunc2)
{
// this will call real func1()
productionCode();
}
根据我的理解,当func1()被嘲笑时,没有办法测试实际的功能。
下面的示例代码只是我想要做的事情。
因为我必须测试许多调用里面许多函数的函数。 有时,我不关心那些其他函数的实际结果,所以我嘲笑它,但是当我想在我测试的函数内部调用时测试实函数的行为,我不能做因为那个功能已经被嘲笑了。
此外,我希望我可以在不修改生产代码的情况下完成此操作,只需要修改测试代码。
答案 0 :(得分:0)
没有。您使用链接器进行了模拟,因此,对于整个文件上下文,实际函数不存在。
答案 1 :(得分:0)
您可以使用 函数指针 (或std::function
,...)来 设置实现 <来实现此目的/ strong> productionCode()
在运行时使用 。
int func1() { /* Production }
int func1_mock() { /* Mock */ }
std::function<int()> impl; // Use a function ptr for C
void productionCode()
{
int x = impl(); // Call current implementation
// ...
}
TEST(...)
{
impl = func1; // Use production code
productionCode();
impl = func1_mock; // Use mock instead
productionCode();
}