由于源代码在做UT测试时,某些if分支不容易构造用例进入,导致分支没有被覆盖。引入打桩组件(cpp-stub, 源码地址https://github.com/coolxv/cpp-stub)后,能够便捷的进入分支代码,提高UT覆盖率。
适用于所有开发人员。
例如SaveToFile为待测试的函数
bool SaveToFile(const std::string text, const std::string path) {
std::ofstream ofs;
ofs.open(path);
if (!ofs.is_open()) {
cout << "Can not open file." << endl;
return false;
}
ofs<<text;
if(ofs.fail()){
cout << "write file failed." << endl;
return false;
}
return true;
}
正常情况下,很难进入ofs.fail()的分支
此时可以实现一个桩函数FailStub(),利用cpp-stub的Stub类,改变ofstream::fail()的入口地址为FailStub(),使得执行fail时,转而执行FailStub.
bool FailStub() {
return false;
}
TEST_F(TestDemo, Demo_a)
{
Stub stub;
stub.set(ADDR(std::ofstream, fail), FailStub);
std::string text = "abcdefg";
bool ret = SaveToFile(text, "test.txt");
ASSERT_FALSE(ret);
}
4.引用方式
不需要编译整个工程,在ut目录下增加stub.h文件即可。