我们是否必须为断言或异常编写单元测试?

时间:2017-09-08 08:29:47

标签: c++ function unit-testing exception assert

正如本文Exception vs Assert?所述,异常用于运行时错误条件,断言用于编码错误。

据我所知,unit-test用于验证函数的功能。除了我们已经知道结果的合法测试用例之外,我们是否必须在单元测试中编写一些非法测试用例来测试断言是否发生或者抛出异常?

4 个答案:

答案 0 :(得分:1)

可以。当“坏”情况发生时,测试断言和/或异常是否发生是个好主意。

阅读更多内容:

PS:你有吗?那么,这取决于你的项目。

答案 1 :(得分:0)

问问自己:是异常还是断言代码?为什么要编写异常和断言?他们有功能!应该保护您的代码免受例如意外数据来自"外部"。因此,如果您需要这种保护,则必须检查代码的功能。

如果您不检查代码会发生什么: 也许你的异常检查范围是错误的,并且你会抛出不期望的情况,或者你不抛出,但你的执行现在以未定义的行为运行。

我的论点很简单:你编写代码和异常,断言是代码。代码做了一些有用的事情,所以你必须检查它。从逻辑的角度来看,断言和异常与if / the / else错误处理没有区别。要获得完整的calltree检查,您必须检查它。 c ++具有特殊的语言功能并不意味着这可能导致不检查使用此功能的代码部分。

答案 2 :(得分:0)

您还应该测试错误情况,以确保测试的方法正确处理错误(例如,该方法是否真的抛出异常,或者只是在压力下发生了段错误?)。

如果您使用gtest,那么您可以使用EXPECT_THROWASSERT_THROW来测试是否抛出了特定异常。

答案 3 :(得分:0)

您的问题无法以通用方式回答。

完美的单元测试是不可能的,甚至是非常好的"单元测试是非常困难的,并且只有在测试时才能实现。非常好"码。小心不要陷入这个陷阱,一切都取决于你的质量要求。

当故障可能导致生命损失时,您是否开发了关键任务系统?加倍努力,尽可能多地进行测试。无论如何,任何改变都必须通过许多官僚步骤。否则适应您的要求。自动化测试的主要好处之一是简化重构,当您可以更改(有时显着)您的实现时,仍然可以确保它在某种程度上有效。太多的测试和这把枪指向你,因为任何改变都需要在测试中进行大量更改,最终阻碍你的进步。

像往常一样没有银弹