当你进行单元测试时,断言是多余的吗?

时间:2010-12-23 17:00:58

标签: unit-testing language-agnostic assert

我还没有用来编写单元测试,我想在一个完整的小工具框架上做这个(让它更安全使用)。这样,我肯定会学到更多关于单元测试的知识,而不是我到目前为止所学到的。

然而,我真的习惯于在任何地方系统地添加断言,我看到有一个确定的上下文(在最终版本中被删除)。主要是作为函数实现的前提条件,每次我都检索必须正确的信息(比如着名示例的C / C ++指针有效性)。

现在我问:当你进行单元测试时,断言是多余的吗?因为当你测试一些代码的行为时它看起来很冗余;但同时它与执行环境不同。

我应该两个都做吗?

4 个答案:

答案 0 :(得分:6)

检查前置条件的断言可以帮助检测和定位集成错误。也就是说,虽然单元测试表明方法在正确使用(调用)时正确运行,但检查前置条件的断言可以检测到对方法的错误使用(调用)。使用断言会导致错误代码快速失败,这有助于调试。

答案 1 :(得分:0)

断言不仅可以验证代码,还可以作为一种文档形式,告知读者各种结构的属性,他们可以确保在执行的那一点上得到满足(例如node->next != NULL)。这有助于在您阅读时创建代码的心理模型。

断言还可用于在运行时防止灾难情形。 e.g。

   assert(fuel);
   launch_rocket();

在没有燃料的情况下尝试启动可能是灾难性的。您的单元测试可能已经捕获了这种情况,但是总是有可能您错过了它并且因为条件未满足而中止 Way 比运行期间的崩溃和刻录更好。

所以,简而言之,我会把它们留在那里。添加它们是一个好习惯,没有学到它的好处。

答案 2 :(得分:0)

我会说你需要两者。单元测试测试您的方法内断言是否正确;)

答案 3 :(得分:0)

单元测试和断言是完全不同的东西,但它们相互补充。

断言涉及方法的正确输入输出。

单元测试涉及确保单元根据某些管理规则工作,例如规范。单元可以是ax方法,类或一组协作类(有时这样的测试名为“集成测试”)

因此方法平方根的断言沿着输入和输出的行都是非负数。  另一方面,Unitests可能会测试9的平方根是3,而某个负数的平方根会产生异常。