2016-12-08 13 views
0

Мне нужен файл gtest, который пройдет, если sigabrt не произойдет, но нужно знать, если это произойдет, или не выполнить тест. Как мне это сделать?Как работает gtest и убедитесь, что sigabrt никогда не бывает

Я думал о таком роде вещь:

TEST_F(TestTest, testSigabrtDoesntHappen) 
{ 
    MyObject &myObject = MyObject::instance(); 
    for(int i=0; i<2; i++){ 
     myObject.doWork(); //this will sigabrt on the second try, if at all 
     ASSERT_TRUE(myObject); 
    } 
    ASSERT_TRUE(myObject); 
} 

Так предполагая SIGABRT бы выйти из испытания, если это произойдет, то мы получили бы 3 тестов проходят иначе. Любые другие идеи?

ответ

1

Не на окна:

::testing::KilledBySignal(signal_number) // Not available on Windows. 

Вы должны смотреть guide.

Похоже, что для меня (не тестировался):

TEST_F(TestTest, testSigabrtDoesntHappen) 
{ 
    MyObject &myObject = MyObject::instance(); 
    for(int i=0; i<2; i++){ 
     EXPECT_EXIT(myObject.doWork(), ::testing::KilledBySignal(SIGBART)), "Regex to match error message"); 
     ASSERT_TRUE(myObject); 
    } 
    ASSERT_TRUE(myObject); 
} 

На окне:

Вы должны обрабатывать сигнал себя такого кода:

// crt_signal.c 
// compile with: /EHsc /W4 
// Use signal to attach a signal handler to the abort routine 
#include <stdlib.h> 
#include <signal.h> 
#include <tchar.h> 

void SignalHandler(int signal) 
{ 
    if (signal == SIGABRT) { 
     // abort signal handler code 
    } else { 
     // ... 
    } 
} 

int main() 
{ 
    typedef void (*SignalHandlerPointer)(int); 

    SignalHandlerPointer previousHandler; 
    previousHandler = signal(SIGABRT, SignalHandler); 

    abort(); //emit SIGBART ? 
} 

doc

Но с Если у вас есть один раз, когда вы запускаете код SIGBART, есть некоторые проблемы с кодом, который вы должны удалить перед выпуском программного обеспечения.


Но если вы действительно хотите отлаживать код (с googletest), используйте это с вашим отладчиком:

foo_test --gtest_repeat=1000 --gtest_break_on_failure 

Вы можете добавить опцию другие к нему, снова: проверьте документ :)

+0

Mine - это окна, mac, linux, поэтому я не могу сделать KilledBySignal? – Michele

+0

@ Сигнал Микеле на окне - беспорядок (на самом деле я думал, что их не было), я думаю, что GoogleTest никогда не поддержит этот код в Windows извините. –

+0

Может быть, я могу просто запустить тест, если мы не окна. Мне нравится твоя идея. Я видел ссылку для руководства, но трудно применить ее к тому, что я делаю. – Michele