如何向gtest发出测试想要跳过自身的信号
How to signal to gtest that a test wants to skip itself
我在谷歌测试中有一组类型的测试用例。但是,其中一些测试用例根本不适用于特定的类型参数。考虑这个示例类型的测试用例:
TYPED_TEST_P(TheTest, ATest){
if(TypeParam::isUnsuitedForThisTest()){
return;
}
// ... real test code goes here
}
这样做效果很好,只需跳过测试即可。然而,在执行测试时,我看到了一个常见的
[ RUN ] XYZ/TheTest/0.ATest
[ OK ] XYZ/TheTest/0.ATest (0 ms)
因此,测试是否被跳过并不明显,它看起来只是成功了。我想以某种方式显示测试用例被跳过了。谷歌测试中是否有某种方法可以表明测试用例被跳过。类似的东西(这不存在):
TYPED_TEST_P(TheTest, ATest){
if(TypeParam::isUnsuitedForThisTest()){
SIGNAL_SKIPPED(); // This is what I would like to have
return;
}
// ... real test code goes here
}
然后,输出会变成这样:
[ RUN ] XYZ/TheTest/0.ATest
[ SKIPPED ] XYZ/TheTest/0.ATest (0 ms)
gtest中是否有一个功能可以实现这种行为?
我提出了一个简单但可接受的解决方案:
只需使用宏打印一个额外的跳过行:
#define CHECK_FEATURE_OR_SKIP(FEATURE_NAME)
do{
if(!TypeParam::hasFeature(FEATURE_NAME)) {
std::cout << "[ SKIPPED ] Feature " << #FEATURE_NAME << "not supported" << std::endl;
return;
}
} while(0)
然后我可以简单地使用这个宏:
TYPED_TEST_P(TheTest, ATest){
CHECK_FEATURE_OR_SKIP(MyFeatureXY);
// ... real test code goes here
}
结果如下:
[ RUN ] XYZ/TheTest/0.ATest
[ SKIPPED ] Feature MyFeatureXY not supported
[ OK ] XYZ/TheTest/0.ATest (0 ms)
唯一的小缺陷是仍然有一行OK
,但至少很明显,测试用例被跳过了,并且丢失的功能也被整齐地显示了出来。另一个缺陷是GUI测试运行程序不会那么整齐地显示跳过,但我不在乎这一点,因为我只使用命令行工具来运行测试用例。
由于gtest版本11.10.0宏GTEST_SKIP()
可用,因此您可以执行以下操作:
TYPED_TEST_P(TheTest, ATest){
if(TypeParam::isUnsuitedForThisTest()){
GTEST_SKIP(); // this ends the test here so no need for return
}
// ... real test code goes here
}
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 在gtest.中使用fff.h模拟系统API
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 如何解决GTest和LibTorch联动冲突
- 如何将GTest与CMake一起使用?遵循谷歌指南时的链接问题
- 升压信号2将插槽传递到成员功能以断开连接
- C++函数包装器来捕获某些信号
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 中止信号来自 C++ 中的中止(3) (SIGABRT)
- 如何向gtest发出测试想要跳过自身的信号