断言和单元测试不兼容吗?

INS*_*INS 4 c c++ unit-testing assertions

我有一些问题涉及从assert.h测试包含断言宏的一些函数的事实.

如果断言失败,测试也会失败.这给我留下了一些永远不会起作用的测试用例.

例如,一个函数而不是指示失败(返回false或类似的东西)断言.

有没有解决方案(包含断言的单元测试函数)?

crm*_*ore 13

您可能正在测试断言在您预期时(在输入错误时)中止的事实.

测试框架Google Test作为ASSERT_DEATH宏,它将测试程序是否在您期望的位置中止(如断言).

您也可以使用NDEBUG定义(-DNDEBUG with gcc)来编译,以禁用单元测试的断言.


Dav*_*d Z 9

也许这只是我,但我认为如果你有断言失败,你甚至不应该考虑更高级别的单元测试,直到你修复它们.这个想法是,如果代码写得正确,断言在任何情况下都不应该失败,包括单元测试.或者至少我是如何编写代码的.

  • 但是,可能存在断言以验证输入参数.有效的单元测试是"此功能以可预测的方式在某些类别的错误输入下爆炸". (16认同)

duf*_*ymo 7

不,单元测试就是您在开发过程中所做的.断言是一个运行时构造.

根据我的经验,大部分时间断言都在生产中被关闭.但你应该一直在测试.

CppUnit是一个很好的测试框架.它是nUnit C++系列的一部分.