首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非中止断言CppUnit

非中止断言CppUnit
EN

Stack Overflow用户
提问于 2013-10-25 17:18:14
回答 2查看 1.7K关注 0票数 2

我在一个testfunction中使用了多个断言,但是当(例如)第一个断言失败时,其余的断言就不再执行了。有没有一种方法可以用CppUnit进行断言(CPPUNIT_ASSERT),使其在失败后不离开测试函数?例如非中止断言。

我发现了这一点:检查,但库中没有实现“http://cppunit.sourceforge.net/cppunit2/doc/”。

EN

回答 2

Stack Overflow用户

发布于 2013-10-27 10:29:33

关于单元测试,有两种思想流派。一个是单元测试应该只测试一件事,如果你想测试两件事,你应该有两个测试。优点是您上面描述的问题被完全消除了,而缺点是需要额外的几秒钟来编写额外的测试。另一个想法是,一个测试可以测试多个东西,这种想法是失败的测试很少发生,并且可以被开发人员识别并修复。优点是复杂的设置只需要完成一次,当然缺点是它在第一次失败时停止测试,隐藏了问题的真实数量和身份。

我的方法是务实。如果您可以通过多个断言逃脱惩罚,并且仍然可以使用一个测试开发并轻松地测试多个属性,那么就这么做吧--但要为失败做好准备,如果您陷入了您所描述的情况,请迅速将测试重构为多个测试,而不是将时间浪费在一个测试上。测试的总数绝对不是一个因素。适当的测试数量是您彻底评估代码所需的数量。

票数 2
EN

Stack Overflow用户

发布于 2019-07-13 06:58:14

使用下面定义的CPPUNIT_VFY(cond)代替CPPUNIT_ASSERT(cond):

代码语言:javascript
复制
#define CPPUNIT_VFY(cond) {\
    try { \
        CPPUNIT_ASSERT(cond); \
    } catch(std::exception& e) { \
        std::cerr << ">>>> EXCEPTION:<" << __LINE__ << ":" << ++xcount << "> " << e.what() << std::endl; \
    } }

您需要在CppUnit派生的测试类中声明xcount,并在setup()方法中初始化它。这将打印递增的失败计数。上面的宏将打印所有断言,而不会在第一次失败时退出。

代码语言:javascript
复制
>>>> EXCEPTION:<140:1> assertion failed
- Expression <whatever>  
>>>> EXCEPTION:<163:2> assertion failed
- Expression <whatever>
etc.

在上面的<>中引用上面的数字。左边是断言失败的行号,右边是失败计数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19585846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档