我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用VisualStudio编写单元测试

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用VisualStudio编写单元测试

一、什么是单元测试

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

二、单元测试的好处

能够协助程序员尽快找到代码中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类是一个静态类。

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

9、单元测试中的特性

TestClass特性

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

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

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

TestMethod特性

用于标识一个测试方法。

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

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

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

10、代码覆盖率

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

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

四、单元测试的标准

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

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

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

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

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

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

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

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

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

2、单元测试代码的写法

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

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

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

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

b、怎么提高代码覆盖率

边界条件数据。

空数据。

格式不正确数据。

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

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

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

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

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用VisualStudio编写单元测试

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用模拟编写单元测试

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《使用模拟编写单元测试》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~问题内容我在里面写了一个rest api。现在我想通过隔离不同的组件来对其进行
使用模拟编写单元测试
2024-04-04

使用django怎么编写一个单元测试功能

本篇文章给大家分享的是有关使用django怎么编写一个单元测试功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、使用requests模拟Http请求   假设你执行成功的返
2023-06-14

Android下编写单元测试步骤

1.编写测试类 extends AndroidTestCase2.编写测试的方法 修饰符是public 直接抛出异常给测试框架 throws Exception3.进行断言4.清单文件进行配置在application节点配置
2022-06-06

如何为 Nest.js 编写单元测试和 E2E 测试

单元测试是对软件中的最小可测试单元进行检查和验证。比如一个函数、一个方法都可以是一个单元。在单元测试中,你会对这个函数的各种输入给出预期的输出,并验证功能的正确性。单元测试的目标是快速发现函数内部的 bug,并且它们容易编写、快速执行。

使用 PowerMock 写单元测试,被坑惨了!

PowerMock 写单测对开发人员来说确实很方便,但是如果工程中的代码量比较大,团队又要求单测覆盖率高,那单测类的数量确实会很多,最终结果就是单测耗时时间很长。这种情况并不适合使用 PowerMock 框架。

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

还记得 .NET Framework 的 ASP.NET WebForm 吗?那个年代如果要在 Web 层做单元测试简直就是灾难啊。.NET Core 吸取教训,在设计上考虑到了可测试性,就连 ASP.NET Core 这种 Web 或 A
2022-06-07

详解如何用JavaScript编写一个单元测试

测试代码是确保代码稳定的第一步。能做到这一点的最佳方法之一就是使用单元测试。这篇文章主要介绍了如何用JavaScript编写你的第一个单元测试,感兴趣的可以了解一下
2022-11-13

Android Studio下的单元测试怎么编写

在Android Studio中编写单元测试可以使用JUnit框架来进行测试。以下是编写Android Studio下单元测试的基本步骤:在项目的app/src/test/java目录下创建一个新的Java测试文件或者包。在测试文件或包中创
2023-10-21

@SpringBootTest单元测试测试类的使用

前言 使用SpringBoot 测试类可在不需要启动程序时,即可使用。当你运行你的测试方法时他会自己启动程序调用所需使用到的mapper,service接口,实现方法。故而可在测试类中像编写正常service方法一样编写代码 一.依赖录入
2023-08-21

探讨如何在Vue3中编写单元测试

当今前端开发中,Vue.js 已经成为了一个非常流行的框架。随着 Vue.js 的不断发展,单元测试变得越来越重要。今天,我们将探讨如何在 Vue.js 3 中编写单元测试,并提供一些最佳实践和常见的问题及解决方案。
2023-05-14

如何写好单元测试?

单元测试的好处到底有哪些?每次单测启动应用,太耗时,怎么办?二方三方接口可能存在日常没法用,只能上预发/正式的情况,上预发测低效如何处理?本文分享三个单元测试神器及相关经验总结。

在 golang 中为泛型函数编写单元测试

php小编香蕉为您带来了一篇关于在Golang中为泛型函数编写单元测试的文章。Golang是一种强类型的编程语言,然而,它在泛型方面的支持却相对较弱。因此,为泛型函数编写单元测试可能会有一些挑战。本文将向您介绍如何在Golang中有效地为泛
在 golang 中为泛型函数编写单元测试
2024-02-11

Golang单元测试与断言编写流程详解

这篇文章主要介绍了Golang单元测试与断言编写流程,单元测试也是一个很重要的事情。单元测试是指在开发中,对一个函数或模块的测试。其强调的是对单元进行测试
2022-12-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录