首页 > 编程语言 > c#中使用METest单元测试

c#中使用METest单元测试

时间:2023-11-03 11:22:40浏览次数:20  
标签:c# 单元测试 METest Assert DataRow 参数 public 测试方法

METest是一个用于测试C#代码的单元测试框架。单元测试是一种软件测试方法,用于验证代码的各个单元(函数、方法、类等)是否按照预期工作。METest提供了一种简单而强大的方式来编写和运行单元测试。

  • TestMethod:这是一个特性,用于标记测试方法。
  • Assert:这是一个断言类,用于验证测试结果是否符合预期。
  • DataTestMethod属性:用于标记一个方法作为参数化测试方法。
  • DataRow属性:用于提供参数值,每个参数值对应一个测试用例。

使用单元测试

点击VS项目解决方案>> MSTest单元测试项目

建好单元项目引入需要测试的项目

AAA(准备、执行、断言)模式

是编写待测试方法的单元测试的常用方法:

  • 准备(Arrange),单元测试方法的准备部分初始化对象并设置传递给待测试方法的数据;
  • 执行(Act),执行部分调用具有准备参数的待测试方法;
  • 断言(Assert),断言部分验证待测试方法的执行行为与预期相同。
[TestMethod()]
public void GetTriangle_Test()
{
    // arrange  
    string[] sideArr = { "5", "5", "5" }; // 准备传给待测试方法的数据
    string expected = "等边三角形";
    // act  
    var actual = UnitTestClass.GetTriangle(sideArr); // 调用测试方法
    // assert  
    Assert.AreEqual(expected, actual); // 验证待测试方法的执行结果是否与预期相同
}

参数化测试

同样的逻辑,根据输入参数不同给出不同的结果。因为只是参数不同,所以并不希望把测试方法写多遍,但是又希望对每个参数的测试成为一个独立的测试用例。举例说,假定我有一个数学计算的方法是把两个整数相加求和,我希望证明这个方法对于任意两个数都是通过的。

[DataTestMethod] //注明这个方法是参数化测试方法;
[DataRow("0508")] //一组参数,参数可以是任何值;但是一定要和参数的测试方法匹配。
[DataRow("0509")]
[DataRow("0005")]
public void GetFlag(string name)
{
    //act 执行部分 调用具有准备参数的待测方法
    var r = fun.Flag("D", "R", name);
    //assert 断言部分 验证预期和实际结果是否相同
    Assert.AreEqual(name, r);
}

这里有一个要点,参数的个数设置多少个,因为测试的方法适合三个参数,所以大部分的人都认为是三个参数就够了,其实不是,应该是四个参数,还有一个是结果值。看上面的代码,我们最后断言的标准是期望值和实际值进行对比,而期望值是来自参数组

测试示例1

using Autofac;
using MerryDllFramework;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace MsTestMerryDLL
{
    [TestClass]
    public class UnitTest1
    {
        Functional fun;
        private static IContainer Container
        {
            set;
            get;
        }

        [ClassInitialize]
        public static void ClassInitialize(TestContext testContext)
        {
            // 在测试类初始化之前进行调用的方法
        }

        [TestInitialize]
        public void TestInitialize()
        {
            // 在每个测试方法执行之前进行调用的方法
            ContainerBuilder builder = new ContainerBuilder();
            builder.RegisterType<Functional>().As<Functional>().SingleInstance();
            Container = builder.Build();
            fun = Container.Resolve<Functional>();
            var res = fun.USB("D", 1);
            Assert.AreEqual(expected: "True", res);
        }

        [TestCleanup]
        public void TestCleanup()
        {
            // 在每个测试方法执行之后进行调用的方法
            var res = fun.USB("D", 0);
            Assert.AreEqual("True", res);
        }

        [DataTestMethod]
        [DataRow("0508")]
        [DataRow("0509")]
        [DataRow("0005")]
        public void GetFlag(string name)
        {
            // 测试方法
            var r = fun.Flag("D", "R", name);
            Assert.AreEqual(name, r);
        }
    }
}

标签:c#,单元测试,METest,Assert,DataRow,参数,public,测试方法
From: https://www.cnblogs.com/ouyangkai/p/17807183.html

相关文章

  • CodeWhisperer 的安装及体验
    文章作者:PonyCodeWhisperer是亚马逊出品的一款基于机器学习的通用代码生成器,可实时提供代码建议。类似Cursor和GithubCopilot编码工具。官网:https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail在编写代码时,它会自动根据您现有的代码和注释生成建议。从单行代码建......
  • 【chrome】如何临时修改已上线的打包好的前端代码?
    找到需要修改的代码在压缩后的文件位置。进入前端静态文件存放目录,确定搜索关键词,执行查找命令grep-c"xxx"./*#-i忽略大小写#-c计算出现次数#-n输出行号#-r查找当前目录及子目录在Portal端进入需要修改的页面,此时才能请求到需要的js文件。对比两边确认需要替......
  • [934] Run the python file directly (ArcGIS Pro)
    ref:TheEditwithIDLEandRunwithArcGISProoptionsarenotavailableinthecontextmenuwhenright-clickingPythonfilesDescriptionInsomeinstances,whenright-clickingPythonfiles,the'EditwithIDLE'and'RunwithArcGISPro&......
  • oracle分页
    SELECTFROM  (  SELECT    T.,    ROWNUMRN  FROM    (SELECT*FROM表名WHERE条件)T  WHERE    ROWNUM<=((currentPage-1)*pageSize+pageSize)  )WHERE  RN>((currentPage-1)*pageSize)......
  • CMake 版本升级
    在CentOS7.3上升级CMake版本可以通过以下步骤完成:检查当前系统上已安装的CMake版本:CopyCodecmake--version确定你想要安装的新版本的CMake。你可以从CMake官方网站上下载最新稳定版的源代码包(https://cmake.org/download/)。在你选择的位置下载CMake源代......
  • PLC 和Modbus/串口设备现场总线通信及短信报警解决方案
    在实现Modbus设备与PROFIBUSDP协议PLC通讯的同时可以在手机端实时的接收报警短信,使客户足不出户了解设备与PLC的状态,及时处理现场中的问题。系统组成Modbus转PROFIBUSDP网关PM-160V6.2具有两个串口,一个RS485,一个RS232,他们一个做通讯接口时,另一个就作为IOT接口,该......
  • 最新CMS指纹识别技术
    本文部分节选于《web安全攻防渗透测试实战指南(第二版)》    指纹识别1.CMS简介CMS(ContentManagementSystem,内容管理系统),又称整站系统或文章系统,用于网站内容管理。用户只需下载对应的CMS软件包,部署、搭建后就可以直接使用CMS。各CMS具有独特的结构命名规则和特定的文件......
  • 安装MySQL初始化问题由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可
    1.关于安装MySQL初始化遇到的问题出现的是如下图错误 这是安装mysql-8.0.25初始化的时候我遇到的报错解决方法如下:安装微软常用运行库合集[下载地址,没有积分的可以评论区联系我](https://download.csdn.net/download/qq_42603590/19686518)安装好之后就不会报错了好了之......
  • TCP协议
    引言在之前的内容中,我们已经详细讲解了TCP面试中最常见的问题,如三次握手和四次挥手等。而今天,我们将继续深入探讨TCP协议的其他方面,比如序列号和TCPFastOpen(TFO)等重要细节问题。这些内容将为你在面试中提供更全面的知识储备。为什么SYN/FIN不包含数据却要消耗⼀个序列号?SYN......
  • c#字符串转整数类型
    将字符串转换为整数类型。为了方便,C#提供了一个内置的方法TryParse来实现这个功能字符串(String):表示一串字符的数据类型。整数(Integer):表示不带小数点的数字。解析(Parsing):将字符串转换为其他数据类型的过程。TryParseTryParse方法是一个静态方法,可以直接通过类名调用。它的代......