一.新建一个类库项目[ UnitTesting],在默认的class1中,写入一个简单的加法函数。
1
using
System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace UnitTesting
6 {
7 public class Class1
8 {
9 public int Add(int i, int j)
10 {
11 return i + j;
12 }
13 }
14}
15
二.建立测试项。
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace UnitTesting
6 {
7 public class Class1
8 {
9 public int Add(int i, int j)
10 {
11 return i + j;
12 }
13 }
14}
15
可以直接测试方法(Add())点击右键,选择弹出的listmenu中选择第二项[创建单元测试相],默认的测试方法已经勾选,此时只需单击"确定"按钮即可;或者在menu中选择test中的新建测试,在弹出添加新建测试窗体中单元测试项目即可。我们可以看一下自动生成的 Class1Test类中的原代码,下面我只是把与测试相关的代码贴出来了。
1
/**/
/// <summary>
2 ///Add (int, int) 的测试
3 ///</summary>
4 [TestMethod()]
5 public void AddTest1()
6 {
7 Class1 target = new Class1();
8
9 int i = 0; // TODO: 初始化为适当的值
10
11 int j = 0; // TODO: 初始化为适当的值
12
13 int expected = 0;
14 int actual;
15
16 actual = target.Add(i, j);
17
18 Assert.AreEqual(expected, actual, "UnitTesting.Class1.Add 未返回所需的值。");
19 Assert.Inconclusive("验证此测试方法的正确性。");
20 }
三。我们在菜单的测试栏中选择窗口的测试管理器,然后选择我们需要测试的方法,再我们勾选方法的那一栏中点击右键“运行选中的测试”这一项,即可。但是显示的结果是没有结论,我们需要把Assert,Inconclusive("");给注释一下,就OK了。
2 ///Add (int, int) 的测试
3 ///</summary>
4 [TestMethod()]
5 public void AddTest1()
6 {
7 Class1 target = new Class1();
8
9 int i = 0; // TODO: 初始化为适当的值
10
11 int j = 0; // TODO: 初始化为适当的值
12
13 int expected = 0;
14 int actual;
15
16 actual = target.Add(i, j);
17
18 Assert.AreEqual(expected, actual, "UnitTesting.Class1.Add 未返回所需的值。");
19 Assert.Inconclusive("验证此测试方法的正确性。");
20 }
还可以在测试方法中修改参数值和期望值等数据。按照以上的操作就可以实现VS2005中的单元测试了。
最后,我在把单元测试中常用的属性简单的罗列一下。
属性 | 描述 |
TestClass() | 该属性表示一个测试装置。 |
TestMethod() | 该属性表示一个测试用例。 |
AssemblyInitialize() | 在执行为执行选择的第一个 TestClass() 中的第一个 TestMethod() 之前,执行带有该属性的方法。 |
ClassInitialize() | 带有该属性的方法在执行第一个测试之前调用。 |
TestInitialize() | 带有该属性的方法在执行每个 TestMethod() 之前调用。 |
TestCleanup() | 带有该属性的方法在执行每个 TestMethod() 之后调用。 |
ClassCleanup() | 带有该属性的方法在执行 ALL 测试之后调用。 |
AssemblyCleanup() | 在执行为执行选择的第一个 TestClass() 中的第一个 TestMethod() 之后,执行带有该属性的方法。 |
Description() | 提供关于给定 TestMethod() 的描述。 |
Ignore() | 由于某种原因忽略 TestMethod() 或 TestClass()。 |
ExpectedException() | 当测试特定异常时,如果使用该属性指定的异常不是从实现代码引发,则测试不会失败。 |