使用MS Test做单元测试

声明:本篇博客翻译自:http://www.c-sharpcorner.com/article/unit-testing-with-ms-tests-in-c-sharp/

写在翻译之前:

依然清晰的记得刚工作的第一个项目中,在完成一个功能模块开发后,师傅让我把代码做一下单元测试。当时一脸“懵懂”。心里的疑惑油然而生,测试不应该是测试人员做的吗?然后就写了一些测试用例把功能简单过了一遍。过了几天后,师傅问我单元测试完成了吗?我很自信的告诉师傅搞定了。师傅让我把单元测试的代码提交到服务器上,他想Review一下!我更加疑惑了,对师傅说,单元测试还要写代码呀?:(

前言:

很多初级开发工程师都会有这样的困惑:谁应该来做单元测试。单元测试应该是由开发者来完成的。

单元测试:

通过一些代码来测试一个方法/函数的行为。

为什么需要单元测试:

  • 通常情况下,一个软件项目会长期运行/维护/更新,这个时间至少也会有5年的时间;

  • 在这期间,维护这个程序非常重要;

  • 任何一个代码的改动都有可能会影响程序的其他功能模块;

  • 因此在更新程序之间,会需要做大量的回归测试(Regression Testing),这将花费测试工程师大量的时间。

想象一下如果代码修改需要非常频繁,那么花费在回归测试上的精力会非常多,同样的,也会有很大的几率捕捉到功能回退(修改缺陷)的问题。

回归测试:

回归测试是确保当增加了新的修改后,老的功能依旧可以正常使用。

单元测试:

  • 单元测试将会最小化回归测试的范围:

  • 每一个方法/函数都会被一系列的测试方法覆盖,这些测试方法将测试真实方法的功能;

  • 测试方法会检查下面的场景/行为:

    • 成功/正常流程

    • 失败

    • 异常/错误处理

  • 一个方法可能需要多个测试方法,这取决于测试方法的复杂度;

  • 在代码交付之前,开发者需要确保所有的测试方法均运行通过

TDD:

 

在写产品代码之前先写单元测试代码,然后使用产品代码来填充/覆盖测试代码。最终使测试代码都运行通过。

编写测试用例:

在C#中有2个测试框架

  • MS Test

  • NUnit

我们使用AAA模式来编写单元测试

  1. 安排所以必须的前置条件和输入;

  2. 在测试代码中操作被测试对象和方法;

  3. 断言期待的结果;

右击解决方案浏览器,选择Unit Test Project并添加:

Employee类:


public class Employee
{
    public string GetName(string firstName, string lastName)
    {
        return string.Concat(firstName, " ", lastName);
    }
}

 单元测试类:


[TestClass]
public class EmpoyeeFunctionalTest
{
    [TestMethod]
    public void GetNameTest()
    {
        // Arrange
        Employee employee = new Employee();
        string firstName = "Jimmy";
        string lastName = "Yang";
        string expacted = "Jimmy Yang";
        string actual = string.Empty;
        // Act
        actual = employee.GetName(firstName, lastName);
        // Assert
        Assert.AreEqual(expacted, actual);
    }
}

 希望上述内容能够帮助你对单元测试有一个概念性的认识。

原文:http://www.cnblogs.com/yang-fei/p/7858078.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jzoj4246-san【最短路,SPFA,DAGdp】

正题 题目大意 nnn个点,mmm条边,若两个点之间的任意一条最短路长度为奇数则称之为不和谐最短路。求每个点有多少条不和谐最短路经过。 解题思路 首先SPFASPFASPFA求一个多元最短路。 然后枚举起点,对于每个起点,我们只走最短路上…

Vue组件传参

父组件向子组件传参 数据&#xff1a; 父组件 <test :message"msg"></test>msg: Hello uniApp子组件&#xff08;test.vue&#xff09; <text>{{message}}</text>props:["message"]子组件向父组件传参 子组件&#xff1a; &…

SpringBoot2.1.9 多Kafka消费者配置

一、配置文件 pom.xml <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency> application.yml spring:application:name: double-kafka-consumerprofiles:active: devjacks…

如果不懂Service mesh,就不要谈微服务了

提到微服务&#xff0c;spring cloud等经典框架被使用的最为广泛&#xff0c;但是在2016年才被提起的Service Mesh&#xff0c;已经被Paypal、Lyft、Ticketmaster和Credit Karma等等一些大流量平台所使用&#xff0c;在生产应用中添加了Service mesh。今年随着Linkerd传入国内&…

欢乐纪中某B组赛【2019.1.29】

前言 Rank1Rank1Rank1耶 成绩 RankRankRank是有算别人的 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC1112017myself2017myself2017myself2802802801001001008080801001001003332017xjq2017xjq2017xjq2002002001001001000001001001001212122017hjq2017hjq2017hjq15…

mysq和mysqli关系

1、在php5版本之前&#xff0c;一般是用php的mysql函数去驱动mysql数据库的&#xff0c;比如mysql_query()的函数&#xff0c;属于面向过程. 2、在php5版本以后&#xff0c;增加了mysqli的函数功能&#xff0c;某种意义上讲&#xff0c;它是mysql系统函数的增强版&#xff0c;更…

SpringBoot2.1.9 分布式锁ShedLock

一、分布式锁配置 &#xff08;1&#xff09;redis锁 pom.xml <dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>2.5.0</version> </dependency><dependency&…

使用AspectCore动态代理

前言 最近越来越多的同学关注到AspectCore&#xff0c;并且提出不少中肯的建议&#xff0c;其中最多的提议是希望能够看到更多的关于AspectCore使用方式的文章和Demo。那么在这篇文章里&#xff0c;我们就来聊聊AspectCore核心之一的动态代理。 动态代理 在.NET平台中&#xff…

P1131-[ZJOI2007]时态同步【树形dp】

正题 题目大意 一棵树&#xff0c;可以增长边权长度&#xff0c;要求根节点要每个叶子节点路径长度相等&#xff0c;求最少增加次数。 解题思路 肯定优先修改上面的边&#xff0c;因为这样可以影响最多的点&#xff0c;那么对于每个节点我们都要使它到每个它子树中叶子节点的…

已经安装完成mysql后wamp怎么配置

如果之前安装过mysql&#xff0c;然后想要安装wamp&#xff0c;那么怎么配置呢 先安装好wamp&#xff0c;然后在以下目录中修改my.ini 将密码改为自己的mysql密码即可 这时你发现启动wamp还是黄的 不要慌&#xff0c;因为你已经安装过了wamp&#xff0c;所以wamp自己的mys…

SpringBoot2.1.9 分布式锁ShedLock不执行坑

一、起由 Configuration EnableScheduling EnableSchedulerLock(defaultLockAtMostFor "PT30S") public class TimerTaskConfig implements SchedulingConfigurer {Beanpublic LockProvider scheduledLockConfiguration(RedisConnectionFactory redisConn) {return…

P3891-[GDOI2014]采集资源【背包,dp】

正题 题目大意 nnn个苦力&#xff0c;aia_iai​资源招募&#xff0c;每sss生产bib_ibi​资源。开始有mmm点资源&#xff0c;求最短时间内生产ttt点资源。 解题思路 先计算fif_ifi​表示花费iii点资源最多可以获得多少生产力。 然后gi,jg_{i,j}gi,j​表示前iii个单位时间资源为…

通过 Visual Studio 的“代码度量值”来改进代码质量

1 软件度量值指标 1.1 可维护性指数 表示源代码的可维护性&#xff0c;数值越高可维护性越好。该值介于0到100之间。绿色评级在20到100之间&#xff0c;表明该代码具有高度的可维护性&#xff1b;黄色评级在10到19之间&#xff0c;表示该代码适度可维护&#xff1b;红色评级在0…

php如何接收前端返回的各种类型的数据

之前学习node后端的时候&#xff0c;因为始终无法在网上找到接收json数据的函数&#xff0c;所以后来就放弃了。最近又心血来潮&#xff0c;想学习php. 这次已经有了之前学习php的基础&#xff0c;所以直接入手thinkphp5.0 这次php的学习&#xff0c;主要是为了解决之前遗留的问…

面试官让我讲讲Java中的锁,我笑了

转载自 面试官让我讲讲Java中的锁&#xff0c;我笑了 在读很多并发文章中&#xff0c;会提及各种各样锁如公平锁&#xff0c;乐观锁等等&#xff0c;这篇文章介绍各种锁的分类。介绍的内容如下&#xff1a; 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁…

ASP.NET Core 认证与授权[5]:初识授权

经过前面几章的姗姗学步&#xff0c;我们了解了在 ASP.NET Core 中是如何认证的&#xff0c;终于来到了授权阶段。在认证阶段我们通过用户令牌获取到用户的Claims&#xff0c;而授权便是对这些的Claims的验证&#xff0c;如&#xff1a;是否拥有Admin的角色&#xff0c;姓名是否…

P1850-换教室【数学期望,dp,Floyd】

正题 题目大意 一张图&#xff0c;nnn次&#xff0c;每次在cic_ici​上课&#xff0c;可以申请换课室到did_idi​&#xff0c;成功概率kik_iki​。求最短需要走的路径的期望长度 解题思路 先FlodyFlodyFlody预处理多源最短路&#xff0c;然后考虑dpdpdp 设fi,j,0/1f_{i,j,0/…

uni-app打包h5

如果我们想打包成直接浏览的h5&#xff0c;我们需要配置manifest.json这个文件&#xff0c;在其中的h5配置中加入publicPath配置&#xff0c;配置如下&#xff1a; 代码为&#xff1a; "h5" : {"publicPath": "./"},配置好这个后&#xff0c;以后…

SpringBoot2.1.9 多MongoDB配置template

一、配置文件 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> application.yml spring:application:name: double-mongoprofiles:active…

[52ABP实战系列] .NET CORE实战入门视频课程出来啦

“ .NET CORE实战入门视频&#xff0c;要是有讲的不好的地方&#xff0c;还请留言。” 早安&#xff01; 各位道友好&#xff0c;.NET CORE入门视频的第一章已经录制完毕了。视频会放在传课网、网易云课堂及segment fault。 本来想的是第一章合计6个小节就可以播放完毕的&#…