这篇学习笔记主要解释一下“NUnit学习笔记1”中举的例子,说明一下NUnit的主要用法。
上个例子中,主要结构如下:
其中Class1内包含了求最大值的方法,也是我要测试的类。
Class1Test就是用来测试Class1中方法的测试类。
流程:
1,要使用NUnit,先必须添加nunit.framework引用:
在Solution Explorer中的References上按右键,添加引用,然后按browse,在NUnit目录下找到nunit.framework.dll,添加
2,在测试类Class1Test的头上添加Imports NUnit.Framework;c#是using NUnit.Framework;
3,标示测试类,在测试类上添加<TestFixture()>这个Attribute ,然后添加一个无参的构造函数(c#为必须,vb.net不必须),如下:
2
3 <TestFixture()> _
4 Public Class Class1Test
5 Public Sub New()
6
7 End Sub
8
9 End Class
4,然后就可以添加一个测试方法了,测试方法前面加上<test()>的Attribute
2 Public Sub FindMaxTest()
3 '定义一个数组
4 Dim list1 As Int32() = {1, 3, 10, 4}
5
6 Dim my As New Class1
7 '测试数组list1中的最大整数是不是10。
8 Assert.AreEqual(4, my.FindMax(list1))
9 End Sub
5,如此,一个单元测试就算是写好了,可以使用了(当然,测试用例还不够完善)。
接下去运行这个单元测试:先编译solution,生成一个exe或dll的程序集,打开nunit-gui.exe,点“file。。。”----〉“Open。。。”,然后,选中刚才生成的程序集,出现如下图:
6,然后按Run,就可以进行测试了,如下图:
出现一个大大的红色,NUnit里面,红色代码test失败,绿色代表成功,黄色代码忽略。
这里出现红色错误,是由于我故意在测试函数里面写错的:
Assert.AreEqual(4, my.FindMax(list1))
这里的最大值,应该是10,测试函数改成如下代码:
2 Public Sub FindMaxTest()
3 '定义一个数组
4 Dim list1 As Int32() = {1, 3, 10, 4}
5
6 Dim my As New Class1
7 '测试数组list1中的最大整数是不是10。
8 Assert.AreEqual(10, my.FindMax(list1))
9 End Sub
重新编译solution,NUnit不必重起,它会自动装载最新的程序集,再按NUnit的Run,如下图:
7,然后,让我们完善一下我们的测试函数:
2 Public Sub FindMaxTest()
3 '定义一个数组
4 Dim list1() As Int32 = {1, 3, 10, 4}
5 Dim list2() As Int32 = {1, 3, 4, 10}
6 Dim list3() As Int32 = {10, 3, 1, 4}
7 Dim list4() As Int32 = {-2, -1, -3}
8
9 Dim my As New Class1
10 '测试数组list1中的最大整数是不是10。
11 Assert.AreEqual(10, my.FindMax(list1))
12
13 '测试边界值
14 Assert.AreEqual(10, my.FindMax(list2))
15 Assert.AreEqual(10, my.FindMax(list3))
16
17 '测试负数数组,数组中最大值应该是-1
18 Assert.AreEqual(-1, my.FindMax(list4))
19
20 End Sub
新增加了3个断言,用来测试边界值,负数。
8,Run,如下图:
哈哈,还是绿灯阿,我们的求最大数的方法就大致测试完成了。
下面列出一下常用的断言:
常用的NUnit断言有:
method |
usage |
example |
Assert.AreEqual(object expected, object actual[, string message]) |
验证两个对象是否相等 |
Assert.AreEqual(2, 1+1) |
Assert.AreSame(object expected, object actual[, string message]) |
验证两个引用是否指向同意对象 |
object expected = new object(); object actual = expected; Assert.AreSame(expected, actual) |
Assert.IsFalse(bool) |
验证bool值是否为false |
Assert.IsFalse(false) |
Assert.IsTrue(bool) |
验证bool值是否为true |
Assert.IsTrue(true) |
Assert.IsNotNull(object) |
验证对象是否不为null |
Assert.IsNotNull(new object()) |
Assert.IsNull(object) |
验证对象是否为null |
Assert.IsNull(null); |