你不知道什么时候下一个开发者会试图运行你的程序,他可能优化或者错误的删除一些包含本质的行。如果你没有一个测试,它就会失败,其他的开发者可能不会知道他们犯了错误。
你也可能试图利用一些常量去替代一些已经通过了的测试中调用的各种各样的参数,例如,看下面的方法:
Public Function Sum(ByVal x As Integer, ByVal y As Integer, _
?ByVal allowNegatives As Boolean) As Integer
If Not allowNegatives Then Throw New Exception()
Return x + y
End Function
你可以打乱代码去测试覆盖,这有一些关于如何测试的变化:
' Try this...
If Not True Then ' replace flag with const
?If x < 0 OrElse y < 0 Then Throw New Exception()
End If
' Or this...
If Not allowNegatives Then
?' replace check with const
If False OrElse y < 0 Then Throw New Exception()
End If
如果所有的测试依然通过,那么你缺少了一个测试,另外一个红色标志是在你为多种相同值测试的检查。如下:ssert.AreEqual(3, retval)
一些方法的关系只看一次(在一个测试中)意味着你可以安全的返回3作为一个值,然后所有的针对这个方法的测试都将通过,这个当然意味着你丢失了一个测试。如果你在单元测试中检查一下代码,它就很容易被检查出来。
确保你的测试写的越简单越好,一个单元测试一般不包括一个if switch或者其他任何的逻辑声明。如果你发现你自己在你的测试中写了一些类似于逻辑声明的东西,这是一个好的机会来测试一个以上的事件,在做这样的操作的时候,你会使得你的测试比读和维护更加的困难,在生产代码中同样如此。保持你的测试简单,你在生产代码中发现bug要胜于在你的单元测试中。
使测试易于运行? 如果你的测试并不容易运行,那么人们不会信任它。你的应用程序最有可能有下面两种类型的测试:
测试在没有任何配置的情况下平稳的运行(这种类型的测试,我们可以在任何的机器上,在代码的最终版上或者在源控制上测试,并且做到没有任何故障的测试)
在运行前需要一些配置.
第一种类型是你应该模仿的,第二种类型是你通常做的,尤其你如果你是一个新的单元测试。如果你发现你自己测试时有很多的特殊的需求,现在是正常的,但是重要的一点就是你要隔离出两个组让他们能够单独的去做测试。
我们的想法是任意一个开发者都应该有能力修改和运行一些不需要设置特殊的配置的测试进行测试。如果这有一些测试需要在运行前有特殊的关注,开发者应该知道他们,然后他可以花一些时间学习这些测试的方法。因为很多的开发者比较的懒(当然,不是你),你可以设想,他们不会去做那些特殊的设置,相反,他们会让测试失败因为他们有更好的事情去做。
文章来源于领测软件测试网 https://www.ltesting.net/