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

c#中使用METest单元测试

时间:2023-11-03 11:38:49浏览次数:24  
标签: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://blog.51cto.com/u_12828212/8162600

相关文章

  • uni-swipe-action的使用和样式问题
    <uni-swipe-action>         <viewv-for="(item,index)innoticeList":key="item.id"style="margin-top:30upx;">            <uni-swipe-action-itemclass="swipe-action-item":right-options="o......
  • PCB设计安规丨电气间隙与爬电距离要点
    在PCB设计中,爬电距离和电气间隙是两个非常重要的安规要求。它们都涉及到PCB上元件之间的安全距离,以确保在元件故障时,不会发生短路或其他安全问题。爬电距离是指两个连接的元件之间的距离,通常是通过在两个元件之间的连接线之间添加足够的空间来实现的。电气间隙是指在PCB板上元件......
  • Tomcat 故障案例排错
    案例一、Tomcat开机自启动故障01、Tomcat 开机自启动方式,通过systemctl 设置开机自启动(点击此处查看二进制安装如何通过systemclt 管理服务)02、修改/etc/rc.d/rc.local,在里面添加/app/tools/tomcat/bin/startup.sh 启动命令开机自启动发现系统重启后,Tomcat启动失败,......
  • centos 7搭建kms服务
    一、下载安装包二、解压缩安装包tar-xzfbinaries_.tar.gz三、选择匹配自己系统的安装,执行安装程序。cdbinaries/Linux/intel/static/./vlmcsd-x64-musl-static四、检查程序是否运行ps-ef|grepvlmcsd-x64-musl-static五、打开一台Windows系统,打开cmd命令,执行卸载之前的秘钥sl......
  • React 中复制静态文件到 build的文件夹中
    React中复制静态文件到build的文件夹中环境:umi 框架前提:在跟目录下放置了Dockerfile 文件,在build时需要自动复制到dist文件夹里面。 1. 安装 copy-webpack-plugin 插件 2. .umirc.ts 文件中使用copy命令import{defineConfig}from"umi";exportdefaultde......
  • 晨控CK-GW08系列网关控制器与CODESYS软件MODBUSTCP通讯手册
    晨控CK-GW08系列网关控制器与CODESYS软件MODBUSTCP通讯手册晨控CK-GW08系列是一款支持标准工业通讯协议ModbusTCP的网关控制器,方便用户集成到PLC等控制系统中。系统还集成了8路读写接口,用户可通过通信接口使用ModbusTCP协议对8路读写接口所连接的读卡器进行相对独立的读写操作。......
  • 无涯教程-H2数据库 - Rollback语句
    ROLLBACK用于将事务回滚到Savepoint或上一个事务,通过使用此命令,无涯教程可以回滚到特定的保存点,也可以回滚到先前执行的事务。Rollback-语法ROLLBACK命令有两种不同的语法。以下是rollback命令的通用语法。ROLLBACK[TOSAVEPOINTsavepointName]以下是回滚命令对特定......
  • C# Lambda 分组排序问题(先对数据进行时间倒序排列,然后再按照某字符分组,在每个分组内再
    问题:先对数据进行时间倒序排列,然后再按照某字符分组,在每个分组内再按照某数字或字符正序排列解答:vardata=list.OrderByDescending(i=>i.Date).ToList();vargData=data.GroupBy(g=>g.code).Select(l=>l.OrderBy(i=>i.Step));varinvData=newList<IndexVM>();......
  • Chrome浏览器已开启自动保存密码,但仍无法自动保存密码的解决办法
     解决方案:打开chrome浏览器的安装目录..\GooglelChromelUserData\Default删除LoginData,LoginData-journal两个文件windows路径可以尝试找:C:\Users\Administrator\AppData\Local\Google\Chrome\UserData\Default重启浏览器,即可原文地址......
  • Windows、Linux 和 Mac:操作系统之间的比较有哪些
    Windows系统、Linux系统与Mac系统:操作系统的对比与选择操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。以下是W......