如何使用VSTS写单元测试

简介:

Microsoft的开发平台VSTS(Visual Studio Team System) 集成了单元测试框架(Team Test),即:

VSTS单元测试。    它支持:
                                          1. 生成测试代码框架;
                                          2. 在IDE中运行测试;
                                          3. 支持从数据库中加载数据的测试;
                                          4. 测试运行完成后,进行代码分析覆盖。

使用VSTS写单元测试的步骤如下:
                                                  1. 创建测试;
                                                  2. 编写测试;
                                                  3. 运行测试;
                                                  4. 代码覆盖。

1.  创建测试

打开解决方案中的.cs类文件(如:StudentManager),在其中的一个方法(如:AddStudent() )上右击,选择“创建单元测试”命令。

在弹出的“创建单元测试”对话框中的“输出项目”下拉框中选择“创建新的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()”双击,便可查看代码覆盖率。

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




本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2008/06/06/1215158.html,如需转载请自行联系原作者


相关文章
|
1月前
|
Java 测试技术 开发者
在软件开发中,测试至关重要,尤以单元测试和集成测试为然
在软件开发中,测试至关重要,尤以单元测试和集成测试为然。单元测试聚焦于Java中的类或方法等最小单元,确保其独立功能正确无误,及早发现问题。集成测试则着眼于模块间的交互,验证整体协作效能。为实现高效测试,需编写可测性强的代码,并选用JUnit等合适框架。同时,合理规划测试场景与利用Spring等工具也必不可少。遵循最佳实践,可提升测试质量,保障Java应用稳健前行。
33 1
|
30天前
|
JSON Dubbo 测试技术
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
42 2
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
|
18天前
|
IDE 测试技术 持续交付
Python自动化测试与单元测试框架:提升代码质量与效率
【9月更文挑战第3天】随着软件行业的迅速发展,代码质量和开发效率变得至关重要。本文探讨了Python在自动化及单元测试中的应用,介绍了Selenium、Appium、pytest等自动化测试框架,以及Python标准库中的unittest单元测试框架。通过详细阐述各框架的特点与使用方法,本文旨在帮助开发者掌握编写高效测试用例的技巧,提升代码质量与开发效率。同时,文章还提出了制定测试计划、持续集成与测试等实践建议,助力项目成功。
44 5
|
30天前
|
JSON 测试技术 数据格式
单元测试问题之使用JCode5插件生成测试类如何解决
单元测试问题之使用JCode5插件生成测试类如何解决
59 3
|
30天前
|
测试技术
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
21 2
|
1月前
|
IDE 测试技术 持续交付
Python自动化测试与单元测试框架:提升代码质量与效率
随着软件行业的发展,代码质量和效率变得至关重要。自动化测试与单元测试是保证质量、提升效率的关键。Python凭借其简洁强大及丰富的测试框架(如Selenium、Appium、pytest和unittest等),成为了实施自动化测试的理想选择。本文将深入探讨这些框架的应用,帮助读者掌握编写高质量测试用例的方法,并通过持续集成等策略提升开发流程的效率与质量。
41 4
|
21天前
|
测试技术 C# 开发者
“代码守护者:详解WPF开发中的单元测试策略与实践——从选择测试框架到编写模拟对象,全方位保障你的应用程序质量”
【8月更文挑战第31天】单元测试是确保软件质量的关键实践,尤其在复杂的WPF应用中更为重要。通过为每个小模块编写独立测试用例,可以验证代码的功能正确性并在早期发现错误。本文将介绍如何在WPF项目中引入单元测试,并通过具体示例演示其实施过程。首先选择合适的测试框架如NUnit或xUnit.net,并利用Moq模拟框架隔离外部依赖。接着,通过一个简单的WPF应用程序示例,展示如何模拟`IUserRepository`接口并验证`MainViewModel`加载用户数据的正确性。这有助于确保代码质量和未来的重构与扩展。
28 0
|
21天前
|
测试技术 Java Spring
Spring 框架中的测试之道:揭秘单元测试与集成测试的双重保障,你的应用真的安全了吗?
【8月更文挑战第31天】本文以问答形式深入探讨了Spring框架中的测试策略,包括单元测试与集成测试的有效编写方法,及其对提升代码质量和可靠性的重要性。通过具体示例,展示了如何使用`@MockBean`、`@SpringBootTest`等注解来进行服务和控制器的测试,同时介绍了Spring Boot提供的测试工具,如`@DataJpaTest`,以简化数据库测试流程。合理运用这些测试策略和工具,将助力开发者构建更为稳健的软件系统。
30 0
|
21天前
|
测试技术 Java
全面保障Struts 2应用质量:掌握单元测试与集成测试的关键策略
【8月更文挑战第31天】Struts 2 的测试策略结合了单元测试与集成测试。单元测试聚焦于单个组件(如 Action 类)的功能验证,常用 Mockito 模拟依赖项;集成测试则关注组件间的交互,利用 Cactus 等框架确保框架拦截器和 Action 映射等按预期工作。通过确保高测试覆盖率并定期更新测试用例,可以提升应用的整体稳定性和质量。
41 0