【发布时间】:2016-09-20 06:59:36
【问题描述】:
在一个测试用例中,我想测试一个在调试模式下为无效输入生成断言的函数。不幸的是,这停止了 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") {
}
}
}
}
【问题讨论】:
-
断言可以防止在正确的程序中永远发生的情况。你为什么要对它进行单元测试?如果在正确的程序中可能出现无效参数(例如来自格式错误的用户输入),您应该使用异常而不是断言。
-
@Quentin 实际上它是一个我想测试的外部库(由 Matlab 代码生成器生成)。我们为生成的代码生成了一个包装器,但如果库可以处理现实生活中可能发生的无效数据,因为它们来自输入文件,现在还没有。我同意在我们的案例中使用异常可能是比断言更好的解决方案。
标签: c++ unit-testing assert catch-unit-test