运行 如何 gtest 并确保 sigabrt 永远不会发生
How run gtest and make sure sigabrt never happens
我需要一个 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 次测试通过。还有其他想法吗?
不在 Window:
::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);
}
上 Window:
您必须使用这种代码自行处理信号:
// 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 ?
}
但严重的是,如果您有一次获得 SIGBART 运行 您的代码,则您的代码存在一些问题,您必须在发布软件之前将其删除。
但如果您真的想调试您的代码(使用 googletest),请将其与您的调试器一起使用:
foo_test --gtest_repeat=1000 --gtest_break_on_failure
您可以再次向其添加其他选项:检查文档:)
我需要一个 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 次测试通过。还有其他想法吗?
不在 Window:
::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);
}
上 Window:
您必须使用这种代码自行处理信号:
// 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 ?
}
但严重的是,如果您有一次获得 SIGBART 运行 您的代码,则您的代码存在一些问题,您必须在发布软件之前将其删除。
但如果您真的想调试您的代码(使用 googletest),请将其与您的调试器一起使用:
foo_test --gtest_repeat=1000 --gtest_break_on_failure
您可以再次向其添加其他选项:检查文档:)