如何运行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个测试。还有其他想法吗?
不在窗口上:
::testing::KilledBySignal(signal_number) // Not available on Windows.
您应该查看指南。
对我来说似乎是这样(未测试):
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
您可以在其中添加其他选项,再次:检查doc:)
相关文章:
- 为什么是谷神星协方差.计算()似乎永远运行而不返回?
- 密码登录程序将永远循环并显示不正确的结果
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- SFML 碰撞永远不会在我的系统中注册
- 中止信号来自 C++ 中的中止(3) (SIGABRT)
- 先进先出:一个进程永远不会从管道读取
- 移动构造函数永远不会被调用
- 为什么我在此代码中收到 SIGABRT 错误
- 程序永远不会进入虚拟析构函数
- OpenCL 内核计时测量 0 秒或导致 SIGABRT
- 在 *.cpp 文件中实现的 c++ 函数/方法永远不会内联扩展吗?
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- 指针永远不会在链表深层复制构造函数中达到 null
- 为什么我的 while 循环永远不会在 C++ 中的数字猜测游戏中结束?
- SIGABRT 和线程相关的异常,但在调试期间工作正常
- 类似函数的宏参数名称替换是否保证永远不会发生?
- curl_slist->next 永远不会为空,因此当循环卡住时
- 我应该使用无符号字符而不是 int 来存储永远不会大于 255 的值吗?
- cudaMemcpyToSymbol只是挂起,永远不会返回.GPU 处理速度为 100%.代码在 K40 上工作正常,但
- 如何运行GTEST并确保Sigabrt永远不会发生