繁体   English   中英

如何测试断言?

[英]How to test assertions?

我正在使用单元测试框架来测试我的库。 我在库中有很多断言,以确保在调试版本中捕获程序员错误。 现在我想确保我正在测试所有可能的程序员错误。

例如,在表 class 中,我想确保行和列传递不大于表具有的行和列。 假设我忘记测试 cols。 我想让我的单元测试在断言应该触发的地方执行测试,如果没有,则测试失败。 那可能吗?

那么问题就变成了您是否计划重构您的代码,以便如果发生这种情况,您将抛出异常而不是依赖<cassert>功能来提示您解决问题? 如果是这样,您只需检查是否引发了异常。 如果不是,那么从<cassert>测试断言语句将更加困难。 像 CUTE 这样的单元测试框架有一个ASSERT_THROWS宏,仅用于异常测试。 我会检查你的框架。

此外,我工作过的商店就是这种情况,他们不赞成断言,更喜欢例外。 调用abort无助于自动化测试。 实际上,它禁止它。 只是我的两分钱。

有三种可能的方式:

  • 将断言转换为异常,或

  • 运行每个测试一个单独的程序,您(或者更确切地说,测试框架)检查其退出代码,或者

  • 让一个触发的断言写入有关自身的信息,然后测试框架可以获取这些信息。

据我所知,没有商业或广泛使用的单元测试框架支持最后两种方式。 我已经使用检查进程退出代码来进行爱好编程,但仅使用在 Python 和 C++ 中实现的小型个人单元测试框架(“爱好编程”:这意味着我没有关于它如何扩展到大规模编程的良好数据)。 进程退出代码测试的主要情况是代码具有 static 断言,您希望确保它们在预期时被触发。

总而言之,使用现有的测试框架,转换为异常是 AFAIK 您唯一的选择。

干杯&hth。

答案取决于您使用的特定测试框架,并且很可能在 google 中很少搜索就可以找到。

“boost unittest test assert”的第一次点击指向StackOverflow中的这个问题: Testing for assert in the Boost Test framework

“cppunit test assert”的第二次点击指向此文档页面: Making Assertions

尝试在互联网上搜索您的具体框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM