在弹出的“创建单元测试”对话框中的“输出项目”下拉框中选择“创建新的Visual C# 测试项目”,单击“确定”按钮,并在“新建测试项目”对话框中输入测试项目的名称(如:MySchoolTest),单击“创建”按钮后,就看见在原有的解决方案中生成了一个新的项目“MySchoolTest”。

测试项目创建成功后,会同时生成4个与测试相关的文件:

AuthoringTest.txt 提供创建测试的说明,包括向项目增加其他测试的说明;

StudentManagerTest.cs 包含AddStudent()的测试,以及测试初始化和测试清除的方法;

MySchoolPro.vsmdi 测试管理文件;

localtestrun.testrunconfig 本地测试运行配置文件。

2. 编写测试

创建测试完毕后,VSTS 为我们自动生成的只是一个测试框架,默认代码中Assert.Inconclusive 表明这是一个未经验证的单元测试。

打开生成的测试文件“StudentManagerTest.cs”, 如示例1:

[TestMethod]
public void AddStudentTest()
{
global::MySchool.BLL.StudentManager target = new
global::MySchool.BLL.StudentManager();

// TODO:初始化为适当的值
global::MySchool.Models.Student student = null;
string expected = null;
string actual;
actual = target.AddStudent(student);

Assert.AreEqual(expected, actual,
"MySchool.BLL.StudentManager.AddStudent 未返回所需的值。");
Assert.Inconclusive("验证此测试方法的正确性。");
}

单元测试中,几个变量的简单介绍:

target 表示测试目标对象,通过这个目标对象可以测试该类中的各个方法;

expected 表示期望得到的值;

actual 表示实际得到的值;

单元测试中,常用的断言方法介绍:

Assert.AreEqual() 测试指定的值是否相等,如果相等,则测试通过;

Assert.Inconclusive() 表示一个未验证的测试;

Assert.IsTrue() 测试指定的条件是否为True,如果为True,则测试通过;

Assert.IsFalse() 测试指定的条件是否为False,如果为False,则测试通过;

Assert.IsNull() 测试指定的对象是否为空引用,如果为空,则测试通过;

Assert.IsNotNull() 测试指定的对象是否为非空,如果不为空,则测试通过;

我们通过对示例1 添加测试所需的初始值,并对断言进行简单的修改后,便得到一个正式的单元测试。

如示例2:

[TestMethod]
public void AddStudentTest()
{
global::MySchool.BLL.StudentManager target = new
global::MySchool.BLL.StudentManager();

// TODO:初始化为适当的值
global::MySchool.Models.Student student = new
global::MySchool.Models.Student(); // 修改1
student.LoginId = "003";
student.LoginPwd = "test003";
student.UserStateId = 1;
student.studentName = "test003";
student.studentNo = "test003";
student.Sex = "男";
student.ClassID = 1;

string expected = "学员帐户创建成功!"; //修改2
string actual;
actual = target.AddStudent(student);

Assert.AreEqual(expected, actual,
"MySchool.BLL.StudentManager.AddStudent 未返回所需的值。");
// Assert.Inconclusive("验证此测试方法的正确性。");
}

这样,便得到了一个正式的单元测试。用断言Assert.AreEqual()比较expected、actual是否相等。
如果相等,测试通过。

配置文件中的设置
由于我们的测试需要和数据库打交道,并且数据库的连接字符串是从配置文件中读取的,所以我们需要在测试项目中添加配置文件(app.config)。

如示例3:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>

<connectionStrings>
//数据库连接字符串设置
<add name="DataBaseOwner" connectionString="dbo" />
<add name="MySchoolConnectionString"
connectionString=" Data Source=.; Initial Catalog=MySchool;
User ID=sa; Password=123456 "
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>

3. 运行测试

打开包含有测试项目的解决方案,在 工具栏 就会出现与测试项目相关的 操作按钮栏。
我们要运行项目中的测试,只需要运行测试项目。

测试项目的运行方式有两种:
运行,并启动调试功能;
运行,但不启动调试功能;

1. 当我们运行测试后,在“测试结果”窗口中,将列出项目中所有的测试。

2. 开始的时候,测试会处于“挂起”的状态,测试运行的结果是“通过”或者“失败”。

3. 如果我们要查看测试结果的额外细节时,选定测试项并双击,便打开了详细信息窗口。

4. 代码覆盖

代码覆盖是单元测试的一个关键指标。

代码覆盖:是指单元测试运行时,覆盖了多少代码。

Team Test 包含了一个代码覆盖工具,可以详细解释被执行代码的覆盖率,并突出显示哪些代码被执行,哪些代码没有被执行。

注意: VSTS 在生成单元测试框架时,默认没有启用“代码覆盖”功能。

启用此功能的办法:

1. 首先打开“本地测试运行配置文件” localtestrun.testrunconfig ,在解决方案中。

2. 双击“localtestrun.testrunconfig”文件,弹出该对话框窗口。

3. 在其对话框窗口的左侧选择“代码覆盖率”,然后在右侧的“要检测的项目”中选择要检测的项目。

4. 单击“应用”按钮。

当我们启用了代码覆盖功能后,再次运行单元测试时:

在“代码覆盖率结果”窗口中,选中“AddStudent()”双击,便可查看代码覆盖率。

在“代码覆盖率结果”窗口中,我们还可以查看单元测试中代码覆盖的块数,以及代码覆盖的百分比信息。

转载于:https://www.cnblogs.com/zgqys1980/archive/2008/10/08/1306514.html

使用studio2005写单元测试相关推荐

  1. 写单元测试应该注意什么

    写单元测试应该注意什么 转载于:https://www.cnblogs.com/yishenweilv/p/10899695.html

  2. 为什么从前那些.NET开发者都不写单元测试呢?

    楔子 四年前我虽然也写了很多年代码,由于公司虽然规模不小,却并非一家规范化的软件公司,因此在项目中严格意义上来说并没有架构设计.也不写单元测试,后来有幸加入了一家公司,这家公司虽然也是一家小公司,但是 ...

  3. 写单元测试的好处(转)

    许多开发者都有个习惯,常常不乐意去写个简单的单元测试程序来验证自己的代码.对自己的程序一直非常有自信,或存在侥幸心理每次运行通过后就直接扔给测试组测试了.然而每次测试组的BUG提交过来后就会发现自己的 ...

  4. java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  5. springboot 事务嵌套问题_在springboot中写单元测试解决依赖注入和执行后事务回滚问题...

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  6. 灵魂拷问:到底要不要写单元测试,如何正确进行单元测试?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/new_com/article/details/116098959 为什么要写单元测试 一聊起测试用例,很多人第一反应就是,我们 ...

  7. 为什么要写单元测试?如何写单元测试?

    01.为什么要写单元测试 一聊起测试用例,很多人第一反应就是,我们公司的测试会写测试用例的,我自己也会使用postman或者swagger之类的进行代码自测.那我们研发到底要不要写单元测试用例呢?参考 ...

  8. Spock in Java 慢慢爱上写单元测试

    前言 最近小组里面引进了Spock这个测试框架,本人在实际使用了之后,体验非常不错,本篇文章一是为了巩固输入的知识,二是为了向大家推广一下. 在了解学习Spock测试框架之前,我们应该先关注单元测试本 ...

  9. 你的项目该不该写单元测试?

    我经历过的项目中有完全不写的,也有必须覆盖80%的,它们之间的区别是什么?(个人的经验可能不具备典型性,欢迎大家拍砖) 项目A:先说说我开始写JSP的时候,后端struts.前端jsp,做好的一个功能 ...

最新文章

  1. android singleTop 不起作用
  2. ajax获取shiroehcache,Shiro – 使用EhCache缓存
  3. bcc校验位怎么算的_数据BCC校验码计算工具
  4. iOS混合开发库(GICXMLLayout)一、介绍
  5. 【linux基础】linux更改python默认版本
  6. UDP Socket编程
  7. yy直播插入php网页,网页YY迷你版怎么用 网页YY直播间进入方法步骤
  8. 上海房屋租赁合同登记备案证明办理流程
  9. 【AngularJS】 # AngularJS入门
  10. 篮球——NBA球队队标
  11. 【MySQL用法】MySQL中大于,大于等于,小于,小于等于的转义写法
  12. 在WordPress中使用旋转文字创建“会话”横幅:第1部分
  13. 零信任兴起:从理念到实践
  14. meta标签中的name属性和http-equiv属性解析
  15. 计算机内存外存的区别
  16. 极客学院ios开发工程师系列课程
  17. Redis之时间轮机制(五)
  18. gcc 编译时中-L -l -Wall的含义
  19. 【枚举 + 求最大公约数方法】最大公约数等于K的子数组数目问题
  20. Visual Studio 6/2005/2008/2010/2012/2013 各版本编译器 下载

热门文章

  1. MySQL优化之查询缓存(mysql8官方已经废弃这个功能)
  2. fastDFS分布式文件系统--文件上传/下载/查询完整代码实现
  3. hadoop分布式文件系统hdfs的概念和特性
  4. redis 主从_Redis的主从复制
  5. 好的Java编程习惯
  6. SPI通信总线-51
  7. python如何使用多线程_python多线程应用中的详细介绍
  8. mos管结电容等效模型_为什么我的mos管炸了???
  9. @entity 不限字节长度的类型_在微信程序员眼里,1024字节能玩出什么花样?
  10. 为什么尽量使用常量引用