关于UT打桩的需求分析


关于UT打桩的需求分析

1.目的

由于源代码在做UT测试时,某些if分支不容易构造用例进入,导致分支没有被覆盖。引入打桩组件(cpp-stub, 源码地址https://github.com/coolxv/cpp-stub)后,能够便捷的进入分支代码,提高UT覆盖率。

2.范围

适用于所有开发人员。

3.场景

例如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文件即可。