2010-06-11 33 views
2

使用测试/单元和minitest,是否有可能失败任何不包含断言的测试,或者是否需要进行猴子修补(例如,检查每次测试执行后断言计数是否增加)?我可以确保所有测试都包含测试/单元中的断言吗?

背景:我不应该写unit tests without assertions - 至少,我应该用assert_nothing_raised如果我冒烟测试,以表明我冒烟测试。

通常我会写首先失败的测试,但我正在编写一些回归测试。另外,我可以提供一个不正确的期望值,看看测试是否在比较预期值和实际值。

+1

http://simpleprogrammer.com/2010/03/05/the-ego-test/ – 2010-06-11 03:13:19

回答

0

由于PK的链接也指出,断言本身的存在并不意味着单元测试是有意义和正确的。我相信没有自动取代谨慎的思考和意识。

确保测试首先失败是一个很好的做法,应该成为一种习惯。

除了您提到的事情之外,我经常在新测试中的断言中设置错误的值,以检查测试是否真正运行并失败。 (然后我解决它:-)这比编辑生产代码更不突出。

0

我真的不认为强迫测试失败没有断言是非常有用的。具有在测试断言不是目的本身 - 的目标是编写有用的测试

缺少的断言仅表示测试可能没有用处。有趣的问题是:如果测试失败,测试会失败吗?。如果没有,那显然是没用的。

如果您正在测试的代码是不会崩溃的,那么assert_nothing_raised就是一种评论。但是,对“不爆炸”进行测试可能意味着本身的弱测试。在大多数情况下,它不会提供任何关于代码的有用信息(因为“没有崩溃!=正确”),那么为什么您首先要写测试呢?另外,我更喜欢一种正确爆炸的方法,它只返回错误的结果。

我找到了最好的回归测试来自外地:中邦您的应用程序(或有测试仪做),并为每一个问题,你觉得写一个失败的测试。修复它,并通过测试通过。

否则,我会测试的行为,而不是没有崩溃。如果我有“空”测试(意思是我还没有写测试代码),我通常会在里面放一个#flunk来提醒我。

1

为了确保单元测试实际验证了使用了一种名为Mutation testing的技术。

对于Ruby,你可以看看Mutant

+0

突变发展搬到这里:https://github.com/mbj/mutant。 (链接已死)。 - 免责声明,作者正在评论。 – mbj 2013-07-21 13:57:27

相关问题