使用MS Test做单元测试
声明:本篇博客翻译自:http://www.c-sharpcorner.com/article/unit-testing-with-ms-tests-in-c-sharp/
写在翻译之前:
依然清晰的记得刚工作的第一个项目中,在完成一个功能模块开发后,师傅让我把代码做一下单元测试。当时一脸“懵懂”。心里的疑惑油然而生,测试不应该是测试人员做的吗?然后就写了一些测试用例把功能简单过了一遍。过了几天后,师傅问我单元测试完成了吗?我很自信的告诉师傅搞定了。师傅让我把单元测试的代码提交到服务器上,他想Review一下!我更加疑惑了,对师傅说,单元测试还要写代码呀?:(
前言:
很多初级开发工程师都会有这样的困惑:谁应该来做单元测试。单元测试应该是由开发者来完成的。
单元测试:
通过一些代码来测试一个方法/函数的行为。
为什么需要单元测试:
- 通常情况下,一个软件项目会长期运行/维护/更新,这个时间至少也会有5年的时间;
- 在这期间,维护这个程序非常重要;
- 任何一个代码的改动都有可能会影响程序的其他功能模块;
- 因此在更新程序之间,会需要做大量的回归测试(Regression Testing),这将花费测试工程师大量的时间。
想象一下如果代码修改需要非常频繁,那么花费在回归测试上的精力会非常多,同样的,也会有很大的几率捕捉到功能回退(修改缺陷)的问题。
回归测试:
回归测试是确保当增加了新的修改后,老的功能依旧可以正常使用。
单元测试:
- 单元测试将会最小化回归测试的范围:
- 每一个方法/函数都会被一系列的测试方法覆盖,这些测试方法将测试真实方法的功能;
- 测试方法会检查下面的场景/行为:
- 成功/正常流程
- 失败
- 异常/错误处理
- 一个方法可能需要多个测试方法,这取决于测试方法的复杂度;
- 在代码交付之前,开发者需要确保所有的测试方法均运行通过。
TDD:
在写产品代码之前先写单元测试代码,然后使用产品代码来填充/覆盖测试代码。最终使测试代码都运行通过。
编写测试用例:
在C#中有2个测试框架
我们使用AAA模式来编写单元测试
- 安排所以必须的前置条件和输入;
- 在测试代码中操作被测试对象和方法;
- 断言期待的结果;
右击解决方案浏览器,选择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);
}
}
希望上述内容能够帮助你对单元测试有一个概念性的认识。
感谢您的阅读!翻译的不到位之处还望指正。谢谢~
使用MS Test做单元测试的更多相关文章
- spring junit 做单元测试,报 Failed to load ApplicationContext 错误
spring junit 做单元测试,报 Failed to load ApplicationContext 错误. 查找了好一会,最后发现.@ContextConfiguration(locatio ...
- 使用python做你自己的自动化测试--对Java代码做单元测试 (2)-导入第三方jar包裹
使用Jython对Java做单元测试,当然,为了测试开发java代码.这涉及到引入第三包的问题,如何导入第三方的包? 您可以使用http://blog.csdn.net/powerccna/artic ...
- 使用karma+jasmine做单元测试
目的 使用karma和jasmine来配置自动化的js单元测试. Karma和Jasmine Karma是由Angular团队所开发的一种自动化测试工具.链接:http://karma-runner. ...
- 持续集成之单元测试篇——WWH(讲讲我们做单元测试的故事)
持续集成之单元测试篇--WWH(讲讲我们做单元测试的故事) 前言 临近上线的几天内非重大bug不敢进行发版修复,担心引起其它问题(摁下葫芦浮起瓢) 尽管我们如此小心,仍不能避免修改一些bug而引起更多 ...
- xcode 5 使用 XCTest 做单元测试
xcode 5 使用 XCTest 做单元测试 什么是单元测试,请看 百度百科 单元测试 一:在xcode5 之前,我们新建项目时,可以选择是否集成单元测试:如今在xcode5,我们新建立的项目默认就 ...
- Web项目如何做单元测试
你可能会用单元测试框架,python的unittest.pytest,Java的Junit.testNG等. 那么你会做单元测试么!当然了,这有什么难的? test_demo.py def inc(x ...
- 基于Springboot+Junit+Mockito做单元测试
前言 前面的两篇文章讨论过< 为什么要写单元测试,何时写,写多细 >和<单元测试规范>,这篇文章介绍如何使用Springboot+Junit+Mockito做单元测试,案例选取 ...
- EnvironmentPostProcessor怎么做单元测试?阿里P7解答
简介 从Spring Boot 1.3开始,我们可以在应用程序上下文刷新之前使用EnvironmentPostProcessor来自定义应用程序的Environment.Environment表示当前 ...
- 2539-SpringSecurity系列--在有安全验证的情况下做单元测试Test
在有安全验证的情况下做单元测试Test 版本信息 <parent> <groupId>org.springframework.boot</groupId> < ...
随机推荐
- ThinkJS框架入门详细教程(二)新手入门项目
一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...
- 使用siege对web接口进行post方式的压力测试
为了达到压力测试的效果,需要申请一台线上机器,并且安装压力测试的工具siege. 安装新版siege.资料说yum安装的版本2.70对于post方式支持的不好,验证后发现请求可以正常发过去,但是打开d ...
- Opencv怎么读入,显示,保存图像-OpenCV步步精深
怎么读入图像呢? 我们用 img = cv2.imread('图像路径\原图像名称',0) 原图像名称要有后缀 .png , .jpg等等原图像带有的后缀. 这里我们着重说明一下图像路径,这个路径一定 ...
- JavaScript--我发现,原来你是这样的JS(四)(看看变量,作用域,垃圾回收机制是啥)
一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的 ...
- vue学习前奏——webpack
"工欲善其事必先利其器",要想学习vue,首先需要我们去了解webpack,便于后期快速构建运行项目.废话不多说,下面开始介绍在开始一个vue项目前我们需要对webpack有一定的 ...
- 解析 .Net Core 注入 (1) 注册服务
在学习 Asp.Net Core 的过程中,注入可以说是无处不在,对于 .Net Core 来说,它是独立的一个程序集,没有复杂的依赖项和配置文件,所以对于学习 Asp.Net Core 源码的朋友来 ...
- jQuery图片轮播(一)轮播实现并封装
利用面向对象自己动手写了一个封装好的jquery轮播对象,可满足一般需求,需要使用时只需调用此对象的轮播方法即可. demo:https://github.com/zsqosos/shopweb ...
- Memcached理解
一.Memcached简介: 1. Memcached是一个自由开源的,高性能的,分布式内存对象缓存系统. 2. Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符 ...
- 微信公众号支付|微信H5支付|微信扫码支付|小程序支付|APP微信支付解决方案总结
最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付.APP微信支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存. 先说注意 ...
- Tomcat 服务器及使用Eclipse绑定Tomcat并发布应用
一.简介 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成 ...