重新运行NUnit,如下:
哦?31行出错:
Assert.AreEqual(-1, my.FindMax(list4))
期望值是-1,但实际却是0,我们回头看一下代码,很容易发现,原来是
Dim max As Int32
这里出错了,max的初始值就是0,所以后面循环判断最大值,对于负数来说,是错误的,重新修改代码:
1Public Class Class1
2 ''' -----------------------------------------------------------------------------
3 ''' <summary>
4 ''' 查找最大值
5 ''' </summary>
6 ''' <param name="list">传入整数数组</param>
7 ''' <returns>返回数组中的最大值</returns>
8 ''' <remarks>
9 ''' </remarks>
10 ''' <history>
11 ''' [Tony] 2006-4-20 Created
12 ''' </history>
13 ''' -----------------------------------------------------------------------------
14 Public Function FindMax(ByVal list As Int32()) As Int32
15 Dim i As Int32
16 Dim max As Int32 = Int32.MinValue
17
18 For i = 0 To list.Length - 1
19 If list(i) > max Then
20 max = list(i)
21 End If
22 Next
23
24 Return max
25 End Function
26
27End Class
2 ''' -----------------------------------------------------------------------------
3 ''' <summary>
4 ''' 查找最大值
5 ''' </summary>
6 ''' <param name="list">传入整数数组</param>
7 ''' <returns>返回数组中的最大值</returns>
8 ''' <remarks>
9 ''' </remarks>
10 ''' <history>
11 ''' [Tony] 2006-4-20 Created
12 ''' </history>
13 ''' -----------------------------------------------------------------------------
14 Public Function FindMax(ByVal list As Int32()) As Int32
15 Dim i As Int32
16 Dim max As Int32 = Int32.MinValue
17
18 For i = 0 To list.Length - 1
19 If list(i) > max Then
20 max = list(i)
21 End If
22 Next
23
24 Return max
25 End Function
26
27End Class
再运行NUnit,这次终于正确了。
从这个例子可以看出,单元测试能帮我们发现一些比较难以发现的bug。