我在一个testfunction中使用了多个断言,但是当(例如)第一个断言失败时,其余的断言就不再执行了。有没有一种方法可以用CppUnit进行断言(CPPUNIT_ASSERT),使其在失败后不离开测试函数?例如非中止断言。
我发现了这一点:检查,但库中没有实现“http://cppunit.sourceforge.net/cppunit2/doc/”。
发布于 2013-10-27 10:29:33
关于单元测试,有两种思想流派。一个是单元测试应该只测试一件事,如果你想测试两件事,你应该有两个测试。优点是您上面描述的问题被完全消除了,而缺点是需要额外的几秒钟来编写额外的测试。另一个想法是,一个测试可以测试多个东西,这种想法是失败的测试很少发生,并且可以被开发人员识别并修复。优点是复杂的设置只需要完成一次,当然缺点是它在第一次失败时停止测试,隐藏了问题的真实数量和身份。
我的方法是务实。如果您可以通过多个断言逃脱惩罚,并且仍然可以使用一个测试开发并轻松地测试多个属性,那么就这么做吧--但要为失败做好准备,如果您陷入了您所描述的情况,请迅速将测试重构为多个测试,而不是将时间浪费在一个测试上。测试的总数绝对不是一个因素。适当的测试数量是您彻底评估代码所需的数量。
发布于 2019-07-13 06:58:14
使用下面定义的CPPUNIT_VFY(cond)代替CPPUNIT_ASSERT(cond):
#define CPPUNIT_VFY(cond) {\
try { \
CPPUNIT_ASSERT(cond); \
} catch(std::exception& e) { \
std::cerr << ">>>> EXCEPTION:<" << __LINE__ << ":" << ++xcount << "> " << e.what() << std::endl; \
} }您需要在CppUnit派生的测试类中声明xcount,并在setup()方法中初始化它。这将打印递增的失败计数。上面的宏将打印所有断言,而不会在第一次失败时退出。
>>>> EXCEPTION:<140:1> assertion failed
- Expression <whatever>
>>>> EXCEPTION:<163:2> assertion failed
- Expression <whatever>
etc.在上面的<>中引用上面的数字。左边是断言失败的行号,右边是失败计数。
https://stackoverflow.com/questions/19585846
复制相似问题