Как мне сделать так, чтобы код не вызывал exit () - PullRequest
0 голосов
/ 01 октября 2018

Я хочу протестировать эту функцию с помощью Google Test:

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

Я хочу, чтобы мой тест не прошел, если foo вызывает std::exit().Как мне это сделать?Это своего рода обратное тому, что делает EXPECT_EXIT ?

1 Ответ

0 голосов
/ 01 октября 2018

Вы должны сделать 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);
}
...