使用test / unit和minitest,是否可能使任何不包含断言的测试失败,或者需要进行猴子修补(例如,检查每次测试执行后断言计数是否增加)?
背景:我不应该写unit tests without assertions - 至少,我应该使用assert_nothing_raised
,如果我正在进行烟雾测试,以表明我正在进行烟雾测试。
通常我会编写首先失败的测试,但我正在编写一些回归测试。或者,我可以提供不正确的预期值,以查看测试是否正在比较预期值和实际值。
答案 0 :(得分:1)
为确保单元测试能够实际验证任何名为Mutation testing的技术。
对于Ruby,您可以查看Mutant。
答案 1 :(得分:0)
正如PK的链接所指出的那样,断言的存在本身并不意味着单元测试是有意义和正确的。我相信没有自动替代仔细的思考和意识。
确保测试首先失败是一种很好的做法,应该养成习惯。
除了你提到的东西之外,我经常在新测试中的断言中设置错误的值,以检查测试是否真正运行并失败。 (然后我当然修理它:-)这比编辑生产代码更不突兀。
答案 2 :(得分:0)
我真的不认为在没有断言的情况下强制测试失败是非常有帮助的。在测试中使用断言本身并不是目标 - 目标是编写有用的测试。
缺少的断言只是表明测试可能无效。有趣的问题是:如果出现问题,测试会失败吗?。如果没有,那显然没用。
如果您正在测试的是代码没有崩溃,那么围绕它的assert_nothing_raised
只是一种评论。但测试“无爆炸”可能表明测试本身就是一个弱点。在大多数情况下,它不会为您提供有关您的代码的任何有用信息(因为“没有崩溃!=正确”),那么为什么您首先编写测试?另外,我更喜欢一种方法,它可以正确地爆炸,只返回错误的结果。
我发现最好的回归测试来自现场:敲你的应用程序(或让你的测试人员这样做),并且对于你发现的每个问题都写了一个失败的测试。修复它,并通过测试。
否则我会测试行为,而不是没有崩溃。如果我有“空”测试(意味着我还没有编写测试代码),我通常会在里面放一个#flunk来提醒我。