代码改变世界

测试驱动开发实践-入门篇

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}

 

这样的代码在这里是编译不通过的,我们首先要去创建一个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}

 然后我们编译通过,但是测试亮红灯,测试失败,接下来我们实现这个方法

 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}

 

然后我们再进行测试,通过
到这里我们基本功能已经测试成功了,但是这里还有我们还需要增加对用户名为空的验证,我们还是和上面一样先写一个测试用例

 

1[Test]
2[ExpectedException(typeof(ArgumentException),ExpectedMessage="登陆名不能为空", UserMessage="用户验证测试失败")]
3public void ValidateLoginName()
4{
5    Employee em = new Employee();
6    em.Login(nullnull);
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}

 

然后我们在nunit工具中测试一下,都是绿灯了
基本功能我们完成了,在下一节中我们将讲解如何对这个代码进行重构,尽请期待。。。