如何在调试模式下绕过单元测试中的断言
How to bypass assert in unit test in Debug mode?
在一个测试用例中,我想测试一个在调试模式下生成无效输入断言的函数。不幸的是,这会停止Catch测试运行程序。有没有办法绕过这个断言,使测试运行器继续运行?
下面是我的测试用例:
SCENARIO("Simple test case", "[tag]") {
GIVEN("some object") {
MyObject myobject;
WHEN("object is initialized with invalid data") {
// method init generates an assertion when parameters are invalid
bool result = myObject.init(nullptr, nullptr, nullptr, nullptr);
REQUIRE(false == result);
THEN("data processing can't be started") {
}
}
}
}
通常assert
是一个宏,做类似
#define assert(e) ((void) ((e)
? 0
: (void)printf ("%s:%u: failed assertion `%s'n", __FILE__, __LINE__, #e),
abort(), // <-- this aborts you program after printf's above
0
)
,这个宏在调试版本中启用。有关更多细节,请查看您的标准assert.h
所以,如果你有一个二进制库来链接你的测试用例,你需要告诉开发团队,除非他们给你一个没有启用断言的发布版本,否则你将无法对他们的API进行负测试用例的单元测试。
如果您需要测试仅头文件库,或者您需要针对要测试的源代码进行编译,则需要
- 使用-DNDEBUG编译你的测试用例/套件;和
- 定义自己的
assert
宏(例如:抛出您将捕获的错误)并希望您的特定assert.h
将测试是否已经定义并且不会尝试再次定义它(再次,在编译器/std库assert.h
头中查找具体信息)
相关文章:
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 用于交叉编译和CMake的预处理器宏的单元测试
- C++ 用于单元测试的模板模板
- 提升 1.64 单元测试编译失败
- 单元测试欧拉到四元数实现失败
- 运行 C++ 单元测试时LNK2005链接错误
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 使用 Google Test 对自定义断言函数进行单元测试
- 如何将我的 CMake 项目配置为运行所有单元测试?
- 在Qt C++单元测试中动态加载QQuickWindow而不是QQuickWidget
- MS 本机单元测试 - 断言::线程失败不起作用
- 我们应该在C++单元测试中测试src代码断言(NOT异常)吗
- 在VS2012单元测试中创建和测试自定义MFC CEdit时,在第21行的afxwin1.inl中断言
- 获取单元测试库的断言函数的函数名称 (__FUNCTION__)
- VS2012:单元测试错误:断言::AreEqual(对象,对象)不起作用
- 如何在调试模式下绕过单元测试中的断言
- 在c++单元测试器中自定义断言