Не на окна:
::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
Вы можете добавить опцию другие к нему, снова: проверьте документ :)
Mine - это окна, mac, linux, поэтому я не могу сделать KilledBySignal? – Michele
@ Сигнал Микеле на окне - беспорядок (на самом деле я думал, что их не было), я думаю, что GoogleTest никогда не поддержит этот код в Windows извините. –
Может быть, я могу просто запустить тест, если мы не окна. Мне нравится твоя идея. Я видел ссылку для руководства, но трудно применить ее к тому, что я делаю. – Michele