测试驱动开发实践-入门篇
2009-06-11 15:39 shaofeng 阅读(2104) 评论(26) 编辑 收藏 举报这个示例所使用的测试框架为NUnit,大家可以到http://www.nunit.org/下载该工具
测试项目中需要引用NUnit中的nunit.framework.dll
如何使用NUnit可以看这篇文章 一步一步学NUnit
我们就以一个简单的需求开始吧。
需求
员工登陆系统,输入登陆名密码,系统返回是否登陆成功
我们首先先对这个需求写测试用例
1[TestFixture]
2public class EmployeeTest
3{
4 [Test]
5 public void LoginTest()
6 {
7 Employee em = new Employee();
8 Assert.IsTrue(em.Login("admin", "admin"), "用户登陆测试失败");
9 }
10}
2public class EmployeeTest
3{
4 [Test]
5 public void LoginTest()
6 {
7 Employee em = new Employee();
8 Assert.IsTrue(em.Login("admin", "admin"), "用户登陆测试失败");
9 }
10}
这样的代码在这里是编译不通过的,我们首先要去创建一个Employee类,并创建Login(string loginName,string password)方法
1/// <summary>
2/// 员工类
3/// </summary>
4public class Employee
5{
6 /// <summary>
7 /// 员工登陆
8 /// </summary>
9 /// <param name="loginName">登陆名</param>
10 /// <param name="password">密码</param>
11 /// <returns></returns>
12 public bool Login(string loginName, string password)
13 {
14 return false;
15 }
16}
2/// 员工类
3/// </summary>
4public class Employee
5{
6 /// <summary>
7 /// 员工登陆
8 /// </summary>
9 /// <param name="loginName">登陆名</param>
10 /// <param name="password">密码</param>
11 /// <returns></returns>
12 public bool Login(string loginName, string password)
13 {
14 return false;
15 }
16}
然后我们编译通过,但是测试亮红灯,测试失败,接下来我们实现这个方法
1/// <summary>
2/// 员工类
3/// </summary>
4public class Employee
5{
6 /// <summary>
7 /// 员工登陆
8 /// </summary>
9 /// <param name="loginName">登陆名</param>
10 /// <param name="password">密码</param>
11 /// <returns></returns>
12 public bool Login(string loginName, string password)
13 {
14 if (loginName == "admin" && password == "admin")
15 {
16 return true;
17 }
18 return false;
19 }
20}
2/// 员工类
3/// </summary>
4public class Employee
5{
6 /// <summary>
7 /// 员工登陆
8 /// </summary>
9 /// <param name="loginName">登陆名</param>
10 /// <param name="password">密码</param>
11 /// <returns></returns>
12 public bool Login(string loginName, string password)
13 {
14 if (loginName == "admin" && password == "admin")
15 {
16 return true;
17 }
18 return false;
19 }
20}
然后我们再进行测试,通过
到这里我们基本功能已经测试成功了,但是这里还有我们还需要增加对用户名为空的验证,我们还是和上面一样先写一个测试用例
1[Test]
2[ExpectedException(typeof(ArgumentException),ExpectedMessage="登陆名不能为空", UserMessage="用户验证测试失败")]
3public void ValidateLoginName()
4{
5 Employee em = new Employee();
6 em.Login(null, null);
7}
2[ExpectedException(typeof(ArgumentException),ExpectedMessage="登陆名不能为空", UserMessage="用户验证测试失败")]
3public void ValidateLoginName()
4{
5 Employee em = new Employee();
6 em.Login(null, null);
7}
这个代码在这里测试还是不通过的,因为我们没有实现,接下来我们实现这个判断,代码最后修改如下
1/// <summary>
2/// 员工登陆
3/// </summary>
4/// <param name="loginName">登陆名</param>
5/// <param name="password">密码</param>
6/// <returns></returns>
7public bool Login(string loginName, string password)
8{
9 if (string.IsNullOrEmpty(loginName))
10 {
11 throw new ArgumentException("登陆名不能为空");
12 }
13 if (loginName == "admin" && password == "admin")
14 {
15 return true;
16 }
17 return false;
18}
2/// 员工登陆
3/// </summary>
4/// <param name="loginName">登陆名</param>
5/// <param name="password">密码</param>
6/// <returns></returns>
7public bool Login(string loginName, string password)
8{
9 if (string.IsNullOrEmpty(loginName))
10 {
11 throw new ArgumentException("登陆名不能为空");
12 }
13 if (loginName == "admin" && password == "admin")
14 {
15 return true;
16 }
17 return false;
18}
然后我们在nunit工具中测试一下,都是绿灯了
基本功能我们完成了,在下一节中我们将讲解如何对这个代码进行重构,尽请期待。。。