当前位置 : 主页 > 编程语言 > c++ >

c – 如何gtest代码没有调用exit()

来源:互联网 收集:自由互联 发布时间:2021-06-23
我想用Google Test测试这个功能: foo() { if(some_grave_error) exit(1); // do something} 如果foo调用std :: exit(),我希望我的测试失败.我该怎么做呢?它与EXPECT_EXIT的作用相反? 你应该使foo()可测试:
我想用Google Test测试这个功能:

foo() {
    if(some_grave_error)
        exit(1);
    // do something
}

如果foo调用std :: exit(),我希望我的测试失败.我该怎么做呢?它与EXPECT_EXIT的作用相反?

你应该使foo()可测试:

using fexit_callback = void(*)(int);
void foo(fexit_callback exit = &std::exit)
{
    if(some_condition)
        exit(1);
}

神奇的是,你所有的麻烦都消失了:

#include <cstdlib>
#include <cassert>

using fexit_callback = void(*)(int);
void foo(fexit_callback exit = &std::exit)
{
    if(true)
        exit(1);
}

namespace mockup
{
    int result = 0;
    void exit(int r) { result = r; }
}

int main()
{
    foo(mockup::exit);
    assert(mockup::result == 1);
}
网友评论