• VS2010的单元测试(一)


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

    一、创建单元测试

    1、在被测试方法体内的右键菜单中选择“创建单元测试”。

    2、在弹出的窗体中,被测试方法被勾选,此处也可以勾选其他的方法,点击“确定”。

    3、在“新建测试项目”窗体中,输入测试项目的名称,点击“创建”。

    4、解决方案中增加了单元测试项目和相应地配置文件。

    二、编写测试代码(以2013.8.29的“求解三角形顶点坐标”算法为例)

    1、测试代码说明

      经过上述步骤,自动生成的单元测试代码为:

      目前只需要关注GetVertexTest()方法即可,其中:

        前四行代码用于初始化被测试方法的参数。

        TwoDimPoint[] expected = null;  //定义方法的期望结果

        TwoDimPoint[] actual;  //定义方法的实际结果  

        Assert.AreEqual(expected, actual);  //断言期望结果与实际结果一致

        Assert.Inconclusive("验证此测试方法的正确性。");  //表明这是一个未经验证的单元测试。

    2、编写“求解三角形顶点坐标”方法的单元测试方法

       单元测试的基本方法是调用被测代码的函数,输入函数的参数值,获取返回结果,然后与预期测试结果进行比较,如果相等则认为测试通过,否则认为测试不通过。“求解三角形顶点坐标”的单元测试代码如下: 

    [TestMethod()]
    public void GetVertexTest()
    {
        TwoDimPoint p1 = null;
        TwoDimPoint p2 = null;
        double len = 0;
        double angle = 0;
        TwoDimPoint[] expected = null;
        TwoDimPoint[] actual;
    
        #region 测试p0和p1点距离为0的情况
    
        p1 = new TwoDimPoint(3, 5);
        len = 0;
        expected = new TwoDimPoint[1];
        expected[0] = new TwoDimPoint(p1);
        actual = Triangle.GetVertex(p1, p2, len, angle);
        Assert.AreEqual(expected.Length, actual.Length);
        Assert.AreEqual(expected[0].X, actual[0].X);
        Assert.AreEqual(expected[0].Y, actual[0].Y);
    
        #endregion
    
        #region 测试p1和p2坐标一样的情况
    
        p1 = new TwoDimPoint(3, 5);
        p2 = new TwoDimPoint(p1);
        len = 2;
        try
        {
            actual = Triangle.GetVertex(p1, p2, len, angle);
        }
        catch (Exception ex)
        {
            NotImplementedException obj = ex as NotImplementedException;
            Assert.IsNotNull(obj);
            StringAssert.Equals("已知两顶点的坐标一致,无法计算未知顶点的坐标!", obj.Message);
        }
    
        #endregion
    
        #region 测试p1、p2边与纵轴平行的情况
    
        #region 测试p0与p1、p2在一条直线上的情况
    
        p1 = new TwoDimPoint(0, 0);
        p2 = new TwoDimPoint(0, -4);
        len = 5;
        angle = Math.PI;
        expected = new TwoDimPoint[1];
        expected[0] = new TwoDimPoint(0, 5);
        actual = Triangle.GetVertex(p1, p2, len, angle);
        Assert.AreEqual(expected.Length, actual.Length);
        Assert.AreEqual(expected[0].X, actual[0].X);
        Assert.AreEqual(expected[0].Y, actual[0].Y);
    
        #endregion
    
        #region 测试p0与p1、p2在不一条直线上的情况
    
        p1 = new TwoDimPoint(0, 0);
        p2 = new TwoDimPoint(0, -4);
        len = 5;
        angle = Math.Asin(0.6);
        expected = new TwoDimPoint[2];
        expected[0] = new TwoDimPoint(3, -4);
        expected[1] = new TwoDimPoint(-3, -4);
        actual = Triangle.GetVertex(p1, p2, len, angle);
        Assert.AreEqual(expected.Length, actual.Length);
        Assert.AreEqual(expected[0].X, actual[0].X);
        Assert.AreEqual(expected[0].Y, actual[0].Y);
        Assert.AreEqual(expected[1].X, actual[1].X);
        Assert.AreEqual(expected[1].Y, actual[1].Y);
    
        #endregion
    
        #endregion
    
        #region 测试一般情况
    
        p1 = new TwoDimPoint(0, 0);
        p2 = new TwoDimPoint(5, 0);
        len = 5;
        angle = Math.Asin(0.6);
        expected = new TwoDimPoint[2];
        expected[0] = new TwoDimPoint(4, 3);
        expected[1] = new TwoDimPoint(4, -3);
        actual = Triangle.GetVertex(p1, p2, len, angle);
        Assert.AreEqual(expected.Length, actual.Length);
        Assert.AreEqual(expected[0].X, actual[0].X);
        Assert.AreEqual(expected[0].Y, actual[0].Y);
        Assert.AreEqual(expected[1].X, actual[1].X);
        Assert.AreEqual(expected[1].Y, actual[1].Y);
    
        #endregion
    }

      以上测试代码对GetVertex方法的代码覆盖率为83.64%。

    三、运行单元测试

      单元测试的运行有两种方式:调试和运行。可以像调试普通代码一样对单元测试代码进行调试,也可以直接运行,单元测试的结果将在“测试结果”界面中展示,双击测试结果,可以得到测试结果的详细信息。单元测试的代码覆盖率可以在“代码覆盖率结果”界面中展示。

    1、打开“测试视图”。

    2、在测试视图中,右键单击方法,选择“运行选定内容”。

    3、查看测试结果。

    4、查看代码覆盖率。

      直接查看代码覆盖率将会提示“找不到任何覆盖率数据(.coverage或.coveragexml)文件。”。

      需要进行下列配置:

      (1)在解决方案中的Solution Items文件夹下双击Local.testsettings,打开打开“测试设置”窗口。

      (2)选择“数据和诊断”,将代码覆盖率设置为启用,然后点击“配置”对代码覆盖率进行配置。

      (3)在“代码覆盖率 详细信息”界面中,勾选要检测的项目,点击“确定”。

      (4)在“测试设置”界面中点击“应用”即可。

      再次查看“代码覆盖率结果”,结果如下:

     

      双击代码覆盖率中的方法,可定位到方法中查看哪部分代码被测试代码覆盖,哪部分未被覆盖。

  • 相关阅读:
    LeetCode 39. Combination Sum
    LeetCode 37. Sudoku Solver
    LeetCode 36. Valid Sudoku
    LeetCode 34. Search for a Range
    LeetCode 33. Search in Rotated Sorted Array
    VS2010出现灾难性错误的解决办法
    双系统下利用MbrFix.exe卸载LINUX系统
    VS 与 SQLite数据库 连接
    人月神话阅读笔记2
    关于疫情数据分析web开发2-网页爬取实现
  • 原文地址:https://www.cnblogs.com/hibernation/p/3317406.html
Copyright © 2020-2023  润新知