测试驱动开发实践-入门篇
2009-06-11 15:39 shaofeng 阅读(2106) 评论(26) 编辑 收藏 举报这个示例所使用的测试框架为NUnit,大家可以到http://www.nunit.org/下载该工具
测试项目中需要引用NUnit中的nunit.framework.dll
如何使用NUnit可以看这篇文章 一步一步学NUnit
我们就以一个简单的需求开始吧。
需求
员工登陆系统,输入登陆名密码,系统返回是否登陆成功
我们首先先对这个需求写测试用例
1
[TestFixture]
2
public class EmployeeTest
3
{
4
[Test]
5
public void LoginTest()
6
{
7
Employee em = new Employee();
8
Assert.IsTrue(em.Login("admin", "admin"), "用户登陆测试失败");
9
}
10
}

2

3

4

5

6

7

8

9

10

这样的代码在这里是编译不通过的,我们首先要去创建一个Employee类,并创建Login(string loginName,string password)方法
1
/// <summary>
2
/// 员工类
3
/// </summary>
4
public 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

4

5

6

7

8

9

10

11

12

13

14

15

16

然后我们编译通过,但是测试亮红灯,测试失败,接下来我们实现这个方法
1
/// <summary>
2
/// 员工类
3
/// </summary>
4
public 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

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

然后我们再进行测试,通过
到这里我们基本功能已经测试成功了,但是这里还有我们还需要增加对用户名为空的验证,我们还是和上面一样先写一个测试用例
1
[Test]
2
[ExpectedException(typeof(ArgumentException),ExpectedMessage="登陆名不能为空", UserMessage="用户验证测试失败")]
3
public void ValidateLoginName()
4
{
5
Employee em = new Employee();
6
em.Login(null, null);
7
}

2

3

4

5

6

7

这个代码在这里测试还是不通过的,因为我们没有实现,接下来我们实现这个判断,代码最后修改如下
1
/// <summary>
2
/// 员工登陆
3
/// </summary>
4
/// <param name="loginName">登陆名</param>
5
/// <param name="password">密码</param>
6
/// <returns></returns>
7
public 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

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

然后我们在nunit工具中测试一下,都是绿灯了
基本功能我们完成了,在下一节中我们将讲解如何对这个代码进行重构,尽请期待。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构