当前位置: 首页 > news >正文

c#中使用METest单元测试

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单元测试

METest是一个用于测试C#代码的单元测试框架。单元测试是一种软件测试方法&#xff0c;用于验证代码的各个单元&#xff08;函数、方法、类等&#xff09;是否按照预期工作。METest提供了一种简单而强大的方式来编写和运行单元测试。 TestMethod&#xff1a;这是一个特性&#…...

七月论文审稿GPT第二版:从Meta Nougat、GPT4审稿到Mistral、LLaMA LongLora

前言 如此前这篇文章《学术论文GPT的源码解读与微调&#xff1a;从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述&#xff0c;对于论文的摘要/总结、对话、翻译、语法检查而言&#xff0c;市面上的学术论文GPT的效果虽暂未有多好&#xff0c;可至少还过得去&am…...

社群团购对接合作,你有研究过社群团购平台的选品吗?

社群团购对接合作&#xff0c;你有研究过社群团购平台的选品吗&#xff1f; 社群团购选品是非常重要的一项工作&#xff0c;一个好的社群团购平台选品逻辑包含了&#xff1a;用户定位&#xff0c;时节性&#xff0c;产品性价比&#xff0c;售后率。用户定位在选品过程中非常重要…...

VSCode 如何设置背景图片

VSCode 设置背景图片 1.打开应用商店&#xff0c;搜索 background &#xff0c;选择第一个&#xff0c;点击安装。 2. 安装完成后点击设置&#xff0c;点击扩展设置。 3.点击在 settings.json 中编辑。 4.将原代码注释后&#xff0c;加入以下代码。 // { // "workben…...

【数据结构】单向链表的增删查改以及指定pos位置的插入删除

目录 单向链表的概念及结构 尾插 头插 尾删 ​编辑 头删 查找 在pos位置前插 在pos位置后插 删除pos位置 删除pos的后一个位置 总结 代码 单向链表的概念及结构 概念&#xff1a;链表是一种 物理存储结构上非连续 、非顺序的存储结构&#xff0c;数据元素的 逻辑顺序 是…...

PageRank算法c++实现

首先用邻接矩阵A表示从页面j到页面i的概率&#xff0c;然后根据公式生成转移概率矩阵 M&#xff08;1-d&#xff09;*Qd*A 常量矩阵Q(qi,j),qi,j1/n 给定点击概率d&#xff0c;等级值初始向量R0&#xff0c;迭代终止条件e&#xff1b; 计算Ri1M*R…...

超低价:阿里云双11服务器优惠价格表_87元一年起

2023阿里云双十一优惠活动已经开启了&#xff0c;轻量2核2G服务器3M带宽优惠价87元一年、2核4G4M带宽优惠价165元一年&#xff0c;云服务器ECS经济型e实例2核2G3M固定带宽优惠价格99元一年&#xff0c;还有2核4G、2核8G、4核8G、4核16G、8核32G等配置报价&#xff0c;云服务器e…...

docker的安装Centos8

在CentOS 7中&#xff0c;可以使用yum安装Docker。Docker官方提供了一个yum源&#xff0c;可以用于安装Docker。以下是安装Docker的步骤&#xff1a; 卸载旧版本的Docker&#xff08;如果有&#xff09; 如果你之前安装过Docker&#xff0c;需要先卸载旧版本的Docker。执行以…...

Android.mk文件制定了链接库,但是出现ld Error

问题描述 Android.mk文件中&#xff0c;指定了库&#xff1a; LOCAL_LDLIBS : -lmylib LOCAL_LDFLAGS -L$(MYLIB_DIR)/lib出现ld: error: undefined symbol: my_function&#xff0c;于是查看so里面是否有my_function函数&#xff1a; nm -D libmylib.so | grep my_functio…...

10.MySQL事务(上)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 前言&#xff1a; 是什么&#xff1f; 为什么? 怎么做&#xff1f; 前言&#xff1a; 本篇文章将会说明什么是事务&#xff0c;为什么会出现事务&#xff1f;事务是怎么做的&#xff1f; 是什么&#xff1f; 我…...

nexus搭建npm私有镜像

假设有一个nexus服务&#xff0c;地址为&#xff1a; http://10.10.33.50:8081/ 创建存储空间 登录后创建存储空间&#xff0c;选择存储类型为File&#xff0c;并设置空间名称为 npm-private 创建仓库类型 2.1 创建hosted类型仓库 创建一个名为 npm-hosted 的本地类型仓库 2.…...

智能化的宠物喂食器解决方案

随着经济条件的不断改善&#xff0c;越来越多的家庭开始追求生活的便捷享受&#xff0c;于是喂食器开始走进千家万户&#xff0c;喂食器主要由储存食物的蓄食箱和传送食物的滑道构成&#xff0c;在外部框架的支撑下&#xff0c;一台喂食器才能正常进行工作&#xff0c;而宠物喂…...

java配置GDAL

<gdal.version>3.7.0</gdal.version><!-- gdal--><dependency><groupId>org.gdal</groupId><artifactId>gdal</artifactId><version>${gdal.version}</version></dependency> GDAL环境安装 downlo…...

采购对接门禁系统采购进厂 空车出厂

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:山JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文…...

服务器经常被攻击的原因

很多中小型企业都是选择虚拟主机服务器&#xff0c;是把一个服务器分成很多个给很多企业一起共用&#xff0c;可能同一个 IP服务器上就有很多个不同企业的网站&#xff0c;这个时候如果跟你同一个IP服务器的网站遭到DDoS攻击&#xff0c;就很有可能会影响到你的网站也无法正常访…...

子女购买房屋,父母出资的如果父母有关借贷的举证不充分则应认定该出资为赠与行为

现实生活中&#xff0c;由于父母与子女不和、子女离婚时父母为保全自己的出资等原因还经常会出现父母请求返还出资的情形。从司法实践反馈情况来看&#xff0c;父母请求返还出资所主张的基础法律关系往往为借贷而非赠与。基干父母子女之间密切的人身财产关系&#xff0c;父母出…...

【腾讯云HAI域探秘】速通腾讯云HAI

速览HAI 产品简介 腾讯云高性能应用服务(Hyper Application lnventor&#xff0c;HA)&#xff0c;是一款面向 Al、科学计算的 GPU 应用服务产品&#xff0c;为开发者量身打造的澎湃算力平台。无需复杂配置&#xff0c;便可享受即开即用的GPU云服务体验。在 HA] 中&#xff0c;…...

R语言爬虫代码模版:技术原理与实践应用

目录 一、爬虫技术原理 二、R语言爬虫代码模板 三、实践应用与拓展 四、注意事项 总结 随着互联网的发展&#xff0c;网络爬虫已经成为获取网络数据的重要手段。R语言作为一门强大的数据分析工具&#xff0c;结合爬虫技术&#xff0c;可以让我们轻松地获取并分析网络数据。…...

行业观察:数字化企业需要什么样的数据中心

伴随着数字经济在中国乃至全球的高速发展&#xff0c;数字化转型已经成为广大企业的必经之路。而作为数字经济的核心基础设施&#xff0c;数据中心充当了接收、处理、存储与转发数据流的“中枢大脑”&#xff0c;对驱动数字经济发展和企业数字化转型起到了极为关键的重要作用。…...

PHP依赖注入 与 控制反转详解

依赖注入 是一种设计模式&#xff0c;用于解耦组件之间的依赖关系。 它的主要思想是通过将依赖的对象传递给调用方&#xff0c;而不是由调用方自己创建或管理依赖的对象。这种方式使得组件的依赖关系更加灵活&#xff0c;易于维护和测试。 控制反转 是一个更广泛的概念&#…...

RK3562核心板选型与开发实战:从硬件拆解到软件适配

1. 项目概述&#xff1a;为什么是PET_RK3562_CORE&#xff1f; 在嵌入式开发领域&#xff0c;尤其是智能硬件和物联网设备的设计中&#xff0c;核心板的选择往往是决定项目成败、成本控制和技术路线的关键一步。最近几年&#xff0c;基于ARM架构的国产化芯片方案异军突起&#…...

【Perplexity AI高手速成指南】:20年AI工程师亲授7大核心技能与3个避坑红线

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity AI平台核心架构与能力边界 Perplexity AI 并非传统意义上的开源模型托管平台&#xff0c;而是一个以“答案溯源”为设计哲学的智能问答引擎。其底层融合了多阶段检索增强生成&#xff08;RAG&#…...

「国内直连」Claude Code安装与API配置保姆级教程:从Node.js到调用,小白少踩坑(亲测跑通)

前言 国内用户最头疼的就是海外账号和网络问题&#xff0c;其实找对中转接口就能省不少事。 这篇文章把从Node.js安装到Claude Code启动的全流程整理清楚&#xff0c;用88api做接口中转&#xff08;国内直连&#xff0c;不用翻墙&#xff09;&#xff0c;尽量让每个步骤都能照…...

无王无帝定乾坤,来自田间第一人 大道同行赴新程

无王无帝定乾坤&#xff0c;来自田间第一人。 ——题记一、旧世终章&#xff1a;王权尽头的暮色朝代崛起方式落幕原因秦铁血征伐暴政失心汉布衣起义外戚乱政唐门阀更迭藩镇割据……………… “千秋岁月流转&#xff0c;世道几经更迭&#xff0c;无数王朝踏着烽烟崛起&#xff0…...

QQ音乐解析工具终极指南:如何轻松获取全网音乐资源

QQ音乐解析工具终极指南&#xff1a;如何轻松获取全网音乐资源 【免费下载链接】MCQTSS_QQMusic QQ音乐解析 项目地址: https://gitcode.com/gh_mirrors/mc/MCQTSS_QQMusic 你是否厌倦了音乐平台的层层限制&#xff1f;想要畅听所有歌曲却不想支付高昂的会员费&#xff…...

从打磨抛光到医疗康复:拆解阻抗控制在机器人实际场景中的选型指南

从打磨抛光到医疗康复&#xff1a;拆解阻抗控制在机器人实际场景中的选型指南 在工业4.0和智能制造的浪潮中&#xff0c;机器人技术正从传统的重复定位作业向更复杂的交互任务演进。无论是汽车制造中的精密装配&#xff0c;还是医疗器械的力控打磨&#xff0c;亦或是康复训练中…...

别再手动复制了!用Python+Wind API批量下载股票、期货、债券代码的完整脚本

金融数据自动化采集实战&#xff1a;PythonWind API全市场证券代码批量获取指南 金融数据是量化研究和投资决策的基础&#xff0c;但手动从Wind客户端导出各类证券代码不仅耗时耗力&#xff0c;还容易出错。本文将手把手教你用Python调用Wind API实现股票、期货、债券、期权等全…...

脉冲神经网络(SNN)稀疏计算加速与RISC-V优化实践

1. 脉冲神经网络与稀疏计算加速概述 脉冲神经网络&#xff08;SNN&#xff09;作为第三代神经网络模型&#xff0c;其最大特点是采用生物神经元类似的脉冲信号进行信息传递。与传统人工神经网络&#xff08;ANN&#xff09;的连续激活不同&#xff0c;SNN只在膜电位达到阈值时才…...

告别黑盒调试:手把手教你用ControlDesk的Bus Navigator虚拟通道抓取CAN信号

告别黑盒调试&#xff1a;手把手教你用ControlDesk的Bus Navigator虚拟通道抓取CAN信号 在汽车电子开发中&#xff0c;硬件在环&#xff08;HIL&#xff09;测试往往面临一个典型困境&#xff1a;当物理ECU或CAN卡尚未就绪时&#xff0c;如何提前开展总线信号验证&#xff1f;传…...

SNMP回调函数优化:Keil MDK中的MIB表管理实践

1. 问题背景与需求分析 在嵌入式网络设备开发中&#xff0c;SNMP&#xff08;简单网络管理协议&#xff09;是远程监控和配置设备的常用方案。使用Keil MDK开发环境时&#xff0c;其Middleware Network组件提供了SNMP协议栈实现&#xff0c;开发者需要通过MIB&#xff08;管理信…...