zoukankan      html  css  js  c++  java
  • [转]Visual Studio 2010单元测试(1)--运行和定义普通单元测试

    Visual Studio 2010 运行和定义单元测试

    在VS2010中,单元测试的功能很强大,使得建立单元测试和编写单元测试代码,以及管理和运行单元测试都变得简单起来,通过私有访问器可以对私有方法也能进行单元测试,并且支持数据驱动的单元测试。

    1、建立单元测试项目

    1.1、从被测试代码生成单元测试

    1)实例:创建VC#模式下的控制台应用程序,工程名为CUnitTest

    2)输入简单的加、减、乘、除函数代码,如下图所示

    [csharp] view plaincopy
     
    1. namespace CUnitTest  
    2. {  
    3.     class Program  
    4.     {  
    5.         public int Add(int a, int b)  
    6.         {  
    7.             return a + b;  
    8.         }  
    9.         public int Dec(int a, int b)  
    10.         {  
    11.             return a - b;  
    12.         }  
    13.         public int Mul(int a, int b)  
    14.         {  
    15.             return a * b;  
    16.         }  
    17.         public int Div(int a, int b)  
    18.         {  
    19.             return a / b;      
    20.         }  
    21.         static void Main(string[] args)  
    22.         {  
    23.         }  
    24.     }  
    25. }  

    3)可按如下步骤建立单元测试

     (1)在Add方法体内,单击鼠标右键,在菜单中选择“创建单元测试”,就能把一个类的测试代码的外壳都自动写好。

    (2)在出现的“创建单元测试”界面中,Add方法被自动勾上,表示要为这个方法创建单元测试代码的基本框架,单击确定按钮

    (3)点击确定后,在新建测试项目中,输入需要创建的单元测试的新项目的名称,然后单击“创建”按钮,则自动创建一个新的单元测试代码项目。

    (4)在“解决档案资源管理器”中可以看到多了一个“AddTest”项目,可以看出“AddTest”项目引用了被测项目的程序集,和单元测试框架Microsoft.VisualStudio.QualityTools.UnitTestFrame,并且自动产生两个C#代码文件AssemblyInfo.cs和ProgramTest.cs

    (5)ProgramTest.cs的代码如下图所示,从图中可以看到,自动产生了一个“ProgramTest”类,并使用[TestClass()]标识为一个单元测试类,以及一个“AddTest”测试方法,。并用[TestMethod()]标识。

    [csharp] view plaincopy
     
    1. using CUnitTest;  
    2. using Microsoft.VisualStudio.TestTools.UnitTesting;  
    3. using System;  
    4. namespace AddTest  
    5. {  
    6.       
    7.       
    8.     /// <summary>  
    9.     ///这是 ProgramTest 的测试类,旨在  
    10.     ///包含所有 ProgramTest 单元测试  
    11.     ///</summary>  
    12.     [TestClass()]  
    13.     public class ProgramTest  
    14.     {  
    15.   
    16.         private TestContext testContextInstance;  
    17.   
    18.         /// <summary>  
    19.         ///获取或设置测试上下文,上下文提供  
    20.         ///有关当前测试运行及其功能的信息。  
    21.         ///</summary>  
    22.         public TestContext TestContext  
    23.         {  
    24.             get  
    25.             {  
    26.                 return testContextInstance;  
    27.             }  
    28.             set  
    29.             {  
    30.                 testContextInstance = value;  
    31.             }  
    32.         }  
    33.  
    34.         #region 附加测试特性  
    35.         //   
    36.         //编写测试时,还可使用以下特性:  
    37.         //  
    38.         //使用 ClassInitialize 在运行类中的第一个测试前先运行代码  
    39.         //[ClassInitialize()]  
    40.         //public static void MyClassInitialize(TestContext testContext)  
    41.         //{  
    42.         //}  
    43.         //  
    44.         //使用 ClassCleanup 在运行完类中的所有测试后再运行代码  
    45.         //[ClassCleanup()]  
    46.         //public static void MyClassCleanup()  
    47.         //{  
    48.         //}  
    49.         //  
    50.         //使用 TestInitialize 在运行每个测试前先运行代码  
    51.         //[TestInitialize()]  
    52.         //public void MyTestInitialize()  
    53.         //{  
    54.         //}  
    55.         //  
    56.         //使用 TestCleanup 在运行完每个测试后运行代码  
    57.         //[TestCleanup()]  
    58.         //public void MyTestCleanup()  
    59.         //{  
    60.         //}  
    61.         //  
    62.         #endregion  
    63.   
    64.   
    65.         /// <summary>  
    66.         ///Add 的测试  
    67.         ///</summary>  
    68.         [TestMethod()]  
    69.         public void AddTest()  
    70.         {  
    71.             Program target = new Program(); // TODO: 初始化为适当的值  
    72.             int a = 0; // TODO: 初始化为适当的值  
    73.             int b = 0; // TODO: 初始化为适当的值  
    74.             int expected = 0; // TODO: 初始化为适当的值  
    75.             int actual;  
    76.             actual = target.Add(a, b);  
    77.             Assert.AreEqual(expected, actual);  
    78.             //Assert.Inconclusive("验证此测试方法的正确性。");  
    79.         }  
    80.   
    81.         /// <summary>  
    82.         ///Dec 的测试  
    83.         ///</summary>  
    84.         [TestMethod()]  
    85.         public void DecTest()  
    86.         {  
    87.             Program target = new Program(); // TODO: 初始化为适当的值  
    88.             int a = 0; // TODO: 初始化为适当的值  
    89.             int b = 0; // TODO: 初始化为适当的值  
    90.             int expected = 0; // TODO: 初始化为适当的值  
    91.             int actual;  
    92.             actual = target.Dec(a, b);  
    93.             Assert.AreEqual(expected, actual);  
    94.             //Assert.Inconclusive("验证此测试方法的正确性。"); //<span style="color:black;">语句是默认添加的,意思是这个方法是</span><span style="color:black;">Visual Studio</span><span style="color:black;">自动创建,运行前自删除或注释此句,否则运行结果无法通过。</span>  
    95.         }  
    96.     }  
    97. }  


    (6)ProgramTest.cs代码文件详讲

    [TestMethod()]:说明了以下代码是一个测试用例

    Int a = 0; // TODO: 初始化为适当的值

    int b = 0; // TODO: 初始化为适当的值

    这两句是被测函数的输入参数,需要我们去修改它的值,也就是我们输入测试用例的地方。

    double expected = 0; // TODO:初始化为适当的值

    double actual;

          这两句话浅显易懂,前一句话是定义了期望值和对它进行初始化,后一句话是定义了实际值。默认

    Assert.AreEqual(expected, actual);

    Assert在这里可以理解成断言:在VSTS里做单元测试是基于断言的测试。

    默认代码中Assert.Inconclusive表明这是一个未经验证的单元测试。在实际的程序中可以注释掉。

  • 相关阅读:
    在虚拟机中的Linux系统搭建ftp服务器,使用nginx代理,实现外网访问ftp服务器的文件——centos6.5系统中的nginx安装及配置
    在虚拟机中的Linux系统搭建ftp服务器,使用nginx代理,实现外网访问ftp服务器的文件——为虚拟机中的系统设置固定ip
    虚拟机搭建redis单机版及redis-cluster,使用redis desktop manager和java(eclipse)连接redis过程遇到问题汇总
    matlab导出jar包错误Error: An error occurred while shelling out to javac(erro code = 1)解决办法
    java源码学习之String.split()
    Java内部类详解(转)
    Spring入门hello world常见问题及解决办法
    SpringMVC中拦截/和拦截/*的区别
    EasyUI datagrid 笔记
    Mybatis整合Spring
  • 原文地址:https://www.cnblogs.com/luohengstudy/p/4110170.html
Copyright © 2011-2022 走看看