使用Visual Studio编写单元测试

一、什么是单元测试

单元测试就是编写一段代码,用来检查某个特定条件下,另外一段代码的行为是否符合我们的预期。
单元测试的代码与实际程序的代码具有同等的重要性。
每一个单元测试,都是用来定向测试它所对应的一个单元的代码是否正确执行(一般只的是对方法的测试)。
单元测试应该由被测试代码的编写者来完成(即程序员自己来完成,因为只有程序员自己才知道程序的效果)。

二、单元测试的好处

能够协助程序员尽快找到代码中bug的具体位置。

能够让程序员对自己的程序更有自信。

能够让程序员在提交项目之前就将代码变得更加的强壮。

能够协助程序员更好的进行开发。

能够向其他的程序员展示你写的程序该如何调用。

能够让项目主管更了解系统当前的情况。

三、编写单元测试

VSTS中的测试工具可以对任何类、接口、结构等实体中的字段、属性、构造函数、方法等进行单元测试。用的最多的是对方法进行测试。

单元测试分为两种:

1、整体测试。

2、单独测试。

通常在解决方案中添加一个测试项目,用于单元测试。将单元测试代码和业务代码分开。

1、新建一个空白的解决方案,命名为:UnitTestingSolution

2、新建一个控制台应用程序,作为业务代码进行测试

3、在控制台应用程序中新建一个Triangle类,对Triangle类里面的方法进行测试,Triangle类定义如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UnitTestingCon
{
    /// <summary>
    /// 三角形
    /// </summary>
    public class Triangle
    {
        // 定义三角形三边长的属性
        public float SideLength1 { get; private set; }
        public float SideLength2 { get; private set; }
        public float SideLength3 { get; private set; }

        /// <summary>
        /// 构造函数,用来给属性赋值
        /// </summary>
        /// <param name="sideLength1"></param>
        /// <param name="sideLength2"></param>
        /// <param name="sideLength3"></param>
        public Triangle(float sideLength1, float sideLength2, float sideLength3)
        {
            SideLength1 = sideLength1;
            SideLength2 = sideLength2;
            SideLength3 = SideLength3;
        }

        /// <summary>
        /// 判断是否是一个三角形
        /// 1、每条边都是正数
        /// 2、两边之和大于第三边
        /// </summary>
        /// <returns></returns>
        public bool IsTriangle()
        {
            // 三边长度有不是正数的返回false
            if((SideLength1<=0)|| (SideLength2 <= 0)|| (SideLength3 <= 0))
            {
                return false;
            }
            else
            {
                return (((SideLength1+SideLength2)>SideLength3)
                    &&((SideLength1+SideLength3))>SideLength2
                    &&((SideLength2+SideLength3)>SideLength1));
            }
        }

        /// <summary>
        /// 判断是否为等边三角形
        /// 1、必须是三角形
        /// 2、三条边必须都相等
        /// </summary>
        /// <returns></returns>
        public bool IsEquilateralTriangle()
        {
            if(!IsTriangle())
            {
                return false;
            }
            else
            {
                return ((SideLength1==SideLength2)&&(SideLength1==SideLength3)&&(SideLength2==SideLength3));
            }
        }

        /// <summary>
        /// 获取三角形的面积
        /// 1、如果不是三角形,面积为0
        /// 2、如果s为三角形的三边(a、b、c)和的一半
        ///    三角形的面积为(s*(s-a)*(s-b)*(s-c))的平方根
        /// </summary>
        /// <returns></returns>
        public double GetArea()
        {
            if(!IsTriangle())
            {
                return 0;
            }
            else
            {
                float s = (SideLength1 + SideLength2 + SideLength3) * 0.5f;
                return Math.Sqrt(s * (s - SideLength1) * (s - SideLength2) * (s - SideLength3));
            }
        }
    }
}

4、新建单元测试项目

在解决方案上面右键,选择“添加”->新建项目:

在打开的对话框中选择测试下面的单元测试项目,项目名称:要测试的类名+Test

创建的单元测试项目结构如下:

UnitTest1是默认生成的测试类,可以删掉。

5、新建测试类

在单元测试项目上右键,选择“添加”->“类”,然后选择测试下面的单元测试

约定:要测试的类和测试的方法以Test结尾。

单元测试默认在Microsoft.VisualStudio.TestTools.UnitTesting命名空间下面。

6、编写测试代码

编写测试代码前首先要添加对测试项目的引用,要测试哪个项目就要添加对哪个项目的引用。测试方法上面要添加特性[TestMethod],表示是一个测试方法。添加是否是三角形方法的测试代码,测试代码如下:

/// <summary>
/// 测试是否是三角形这个方法
/// </summary>
[TestMethod]
public void IsTriangleTest()
{
      #region 测试用例一
      // 初始化属性
      float SideLength1 = 0f;
      float SideLength2 = 0f;
      float SideLength3 = 0f;
      // 实例化
      riangle target = new Triangle(SideLength1, SideLength2, SideLength3);
       // 定义一个变量,保存期待的结果
       bool excepted = false;
       // 定义一个变量,保存实际的结果
       bool actual;
       actual = target.IsTriangle();
       // 断言期待的结果和实际的结果是否相等,如果相等表示测试通过,否则测试失败
       Assert.AreEqual(excepted, actual);
       #endregion
}

7、运行测试代码

在运行测试代码以前,需要打开测试资源管理器窗口和代码覆盖率结果窗口,在菜单栏的测试里面打开

运行测试代码,可以在测试方法上面右键选择运行测试:

或者选择菜单栏测试里面的运行:

或者是在测试资源管理器里面的测试方法上面直接右键:

运行测试代码,查看测试结果:

表示测试通过。

注意:在测试方法里面添加断点,可以进行调试,可以按照上面的三种方式选择调试测试。

查看代码覆盖率:

从上面的截图中可以看出,代码覆盖率只要25%,说明测试代码写的还不够全面。需要继续完善单元测试的代码。

8、Assert类

Assert:断言

在Microsoft.VisualStudio.TestTools.UnitTesting命名空间中。

Assert类是一个静态类。

序号 方法 描述
1 AreEqual 判断两个值是否相等,如果两个值不相等,则测试失败。有多个重载
2 AreNotEqual 判断两个值是否不相等,如果两个值相等,则测试失败。有多个重载
3 AreSame 判断引用的对象是否相同。如果两个输入内容引用不相同的对象,则测试失败。
4 AreNotSame 判断引用的对象是否不相同。如果两个输入内容引用相同的对象,则测试失败。
5 Fail 断言失败
6 Inconclusive 表示无法证明为true或false的测试结果
7 IsFalse 指定的条件是否为false。如果该条件为true,则测试失败。
8 IsTrue 指定的条件是否为true。如果该条件为false,则测试失败。
9 IsInstanceofType 测试指定的对象是否为所需类型的实例。如果所需的实例不在该对象的继承层次结构中,则测试失败。
10 IsNotInstanceOfType 测试指定的对象是否为所需类型的实例。如果所需的实例在该对象的继承层次结构中,则测试失败。
11 IsNull 测试指定的对象是否为空。
12 IsNotNull 测试指定的对象是否为非空。

9、单元测试中的特性

TestClass特性

用于标识类是一个测试类。

用法:在类上面标注[TestClass]

测试类的命名方式:<被测试类的类名>Test

TestMethod特性

用于标识一个测试方法。

用法:在测试方法上面标注[TestMethod]

测试方法的命名方式:<被测试方法的方法名>Test

注意:在测试方法上面一定要添加TestMethod特性,否则该方法不会被执行。

10、代码覆盖率

代码覆盖率是单元测试写的是否合理或是否达到要求的一个唯一的标准。

代码覆盖率是测试代码所运行到的实际程序路径的覆盖率。

四、单元测试的标准

1、哪些代码需要单元测试

a、既有代码添加单元测试的步骤

第一步:对所有程序集中的公开类以及公开类里面的公开方法添加单元测试。

第二步:对于构造函数和公共属性进行单元测试。

第三步:添加全面单元测试。

b、给哪些代码添加单元测试

针对属于框架技术中的代码添加单元测试。

为业务逻辑层对界面公开的方法添加单元测试。

c、对应刚开始的项目,应该对所有公开的方法和属性都添加单元测试。

2、单元测试代码的写法

a、编写单元测试代码时注意事项

所测试的方法的代码覆盖率必须达到100%。

所测试的代码内部的状态。

被测试的代码所使用的外部设备的状态。(比如打印机的状态)

b、怎么提高代码覆盖率

边界条件数据。

空数据。

格式不正确数据。

3、单元测试是否达到预期值

代码覆盖率100%并不能完全保证代码正确。

需要对执行的结果进行断言。

平均每5行测试代码要有一个断言。

测试外部设备状态更改时,测试是否正常通过。

到此这篇关于Visual Studio编写单元测试的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C# 单元测试全解析

    目录 1.前言 2.单元测试 2.1 单元测试的定义 2.2 单元测试的好处 2.3 单元测试的原则 3..NET 中的测试框架 3.1 MS Test 3.2 NUnit 3.3 XUnit 4.XUnit 的基本使用 5.其他 1.前言 "不会写单元测试的程序员不是合格的程序员,不写单元测试的程序员不是优秀的工程师." 那么问题来了,什么是单元测试,如何做单元测试. 2.单元测试 2.1 单元测试的定义 按照维基百科上的说法,单元测试(Unit Testing)又称为模块测试, 是

  • ASP.NET Core对Controller进行单元测试的完整步骤

    前言 单元测试对我们的代码质量非常重要.很多同学都会对业务逻辑或者工具方法写测试用例,但是往往忽略了对Controller层写单元测试.我所在的公司没见过一个对Controller写过测试的.今天来演示下如果对Controller进行单元测试.以下内容默认您对单元测试有所了解,比如如何mock一个接口.在这里多叨叨一句,面向接口的好处,除了能够快速的替换实现类(其实大部分接口不会有多个实现),最大的好处就是可以进行mock,可以进行单元测试. 测试Action 下面的Action非常简单,非常常

  • 详解.Net单元测试方法

    1.测试异常 可以直接对方法进行异常测试,也可以对模拟对象进行异常测试,但是,对模拟对象进行异常测试,很少用,所以,这里就介绍对方法的异常测试.请看如下代码,当用户名为空的时候,抛出异常. 例如 public bool Valid(string userName, string passWord) { if (string.IsNullOrEmpty(userName)) throw new ArgumentNullException("userName is null"); var

  • 浅谈.Net Core后端单元测试的实现

    1. 前言 单元测试一直都是"好处大家都知道很多,但是因为种种原因没有实施起来"的一个老大难问题.具体是否应该落地单元测试,以及落地的程度, 每个项目都有自己的情况. 本篇为个人认为"如何更好地写单元测试", 即更加 偏向实践向 中夹杂一些理论的分享. 下列示例的单元测试框架为 xUnit , Mock库为 Moq 2. 为什么需要单元测试 优点有很多, 这里提两点我个人认为的很明显的好处 2.1 防止回归 通常在进行新功能/模块的开发或者是重构的时候,测试会进行回

  • ASP.NET Core针对一个使用HttpClient对象的类编写单元测试详解

    介绍 几年前,微软引入了HttpClient类来替代HttpWebRequest来发送Web请求.这个新的类更易于使用,更加简洁,更具有异步性,且易于扩展. HttpClient类有一个可以接受HttpMessageHandler类对象的构造函数.HttpMessageHandler类对象可以接受一个请求(HttpRequestMessage), 并返回响应(HttpResponseMessage).它的功能完全取决于它的实现.默认情况下HttpClient使用的是HttpClientHandl

  • ASP.NET Core中使用xUnit进行单元测试

    单元测试的功能自从MVC的第一个版本诞生的时候,就是作为一个重要的卖点来介绍的,通常在拿MVC与webform比较的时候,单元测试就是必杀底牌,把webform碾压得一无是处. 单元测试的重要性不用多说了,有单元测试的做兜底的项目,好比给开发人员买了份保险,当然这个保险的质量取决于单元测试的质量,那些一路Mock的单元测试,看起来很美,但是什么都cover不到.目前工作中的一个老项目,有2万多个单元测试用例,其中不少是用心之作,真正落实到了业务逻辑,开发人员可以放心的去修改代码,当然一切都必须按

  • xUnit 编写 ASP.NET Core 单元测试的方法

    还记得 .NET Framework 的 ASP.NET WebForm 吗?那个年代如果要在 Web 层做单元测试简直就是灾难啊..NET Core 吸取教训,在设计上考虑到了可测试性,就连 ASP.NET Core 这种 Web 或 API 应用要做单元测试也是很方便的.其中面向接口和依赖注入在这方面起到了非常重要的作用. 本文就来手把手教你如何用 xUnit 对 ASP.NET Core 应用做单元测试..NET Core 常用的测试工具还有 NUnit 和 MSTest,我本人习惯用 x

  • 使用Visual Studio编写单元测试

    一.什么是单元测试 单元测试就是编写一段代码,用来检查某个特定条件下,另外一段代码的行为是否符合我们的预期.单元测试的代码与实际程序的代码具有同等的重要性.每一个单元测试,都是用来定向测试它所对应的一个单元的代码是否正确执行(一般只的是对方法的测试).单元测试应该由被测试代码的编写者来完成(即程序员自己来完成,因为只有程序员自己才知道程序的效果). 二.单元测试的好处 能够协助程序员尽快找到代码中bug的具体位置. 能够让程序员对自己的程序更有自信. 能够让程序员在提交项目之前就将代码变得更加的

  • Visual Studio IDE编写程序时不显示窗口或窗口一闪而逝的解决方法

    使用Visual Studio IDE编写程序时不显示窗口,或窗口一闪而逝,遇到这个问题并不是你的代码出错了,而是IDE本身的设置问题,所以不用总是纠结自己代码哪里写错了. 例如写了一个这样的程序: #include "iostream" using namespace std; int main(int argc, char *argv[]) { cout << "hello world!" << endl; return 0; } 下面提

  • visual studio 2019安装配置可编写c/c++语言的IDE环境

    IDE的下载和安装: 首先,到visual studio官网下载vs2019的安装程序. 学生.或个人开发者免费下载第一个community版本. 下载完成后双击进行安装.安装时要选择安装工作负载.可根据需要勾选相应的负载.因为我们要写c/c++程序,所以勾选了这个使用c++的桌面开发,然后点击右下角安装按钮继续安装. 如果安装的时候忘记选择工作负载,或者安装完成后需要更改工作负载,可以在此打开vs2019的安装程序,然后在点击已安装程序中的修改按钮进行修改: 进入工作负载配置界面做好勾选后点击

  • Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++的教程详解(Windows)【真正的小白版】

    写在前面的前面:这篇文章vscode和cpp插件版本有点老了,仅供大家参考,最新的和最详细的更新见我的另一篇文章: https://www.jb51.net/article/183154.htm 写在前面: 由于这学期(或者说这一年)一直在忙别的,也没什么闲心看博客了,近期发现自己的这篇文章:整理:Visual Studio Code (vscode) 配置C.C++环境/编写运行C.C++(Windows)竟然有了好多访问,也有不少童鞋问各种问题,非常感谢大家的支持,本来是自己整理的没想到有这

  • Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++的教程详解(主要Windows、简要Linux)

    2020年2月22日更新,又按照自己的帖子尝试了以下,感觉大的思路是没问题的啊,小改动用紫色的标记标注出来了,另外如评论区所说删去了部分旧版本的内容和图片,不知道为啥评论区的留言我都没收到邮件... 现在是2019.7.21,由于这阵一直在忙,今天我用最新的VSCode(Version 1.36.1) 和最新的Cpp插件(version 0.24.0)按照本文的安装步骤从零开始试了一下,由于vscode版本和cpp插件版本更新确实变化了很多,2019年7月21日更新的我会用这个颜色(粉色?)标示

  • Visual Studio Code配置C、C++环境并编写运行的方法

    弄了半天,总算弄好了,结合网上的教程,整理分享一下~ 总体流程: 下载安装vscode 安装cpptools插件 安装编译.调试环境 修改vscode调试配置文件 下载安装vscode  https://code.visualstudio.com/Download Visual Studio Code 64位 v1.26.0 官方最新安装版:https://www.jb51.net/softs/606746.html Visual Studio Code 32位 v1.26.0 官方最新安装版:

  • Visual Studio 2017新版发布 更强大!

    Visual Studio 2017新版发布:更强大! 官方发布原文:A fresh update to Visual Studio 2017 and the next preview 今年 3 月份,微软发布了 Visual Studio 2017,这也是迄今 Windows 设备最新.最强大的集成开发环境. 在本次 Build 开发者大会上,Visual Studio 2017 再次获得功能强化. 微软今天正式宣布推出 Visual Studio 2017 15.2 正式版和 Visual

  • Microsoft Visual Studio 2017 for Mac Preview安装使用案例分享

    本文为大家详细介绍了Microsoft Visual Studio 2017 for Mac Preview 下载.安装.案例Demo 0. 前言: 工作原因,上下班背着我的雷神,一个月瘦了10斤,扛不住了,就把我的Mac放在公司. Mac之前为了运行VS,还买了一个PD虚拟机... 现在,我终于喝到鸡汤了--随着Visual Studio 2017的发布,for Mac的版本也诞生了! 下载地址大家可以去visualstudio官网下载,不过可能会有点儿慢,我上传了百度云.文章最后提供下载.

  • Visual Studio 2017 针对移动开发的新特性汇总

    Visual Studio是世界上最好的IDE之一,如果是 .NET世界,那就没有之一了(^_^),而最近推出的Visual Studio 2017在移动平台方面更是加强了这一点.这个版本包含了一些非常棒的功能,包括实时单元测试.新的重构.代码提示.C#7.0的支持,以及帮助移动开发人员构建更好的移动应用程序的功能. 下面,就让我们一起来看看Visual Studio 2017中有哪些功能使得移动开发变得更加容易. Visual Studio 2017的安装体验有所提升 Visual Studi

  • Visual Studio 2017正式版发布 亮点看这里

    Visual Studio 2017 正式版发布,该版本不仅添加了实时单元测试.实时架构依赖关系验证等新特性,还对许多实用功能进行了改进,如代码导航.IntelliSense.重构.代码修复和调试等等.无论使用哪种语言或平台,都能节省开发者在日常任务上花费的时间和精力. 此外,该版本还带来了一个新的轻量化和模块化的安装体验,可根据需要量身定制安装.多个增强功能汇集在一起,使 Visual Studio 2017 的启动速度比 Visual Studio 2015 快3倍,解决方案加载时间缩短 2

随机推荐