Unit Test Via Visual Studio
转载Unit Test Via Visual Studio-Part1
写在开头:Coding ain't done until all the tests run. No unit test no BB.
-------------------------------------------------------------
本文主要介绍如何在Visual Studio(2012+)下面做单元测试。主要以下内容:
- 单元测试介绍
- 单元测试的基本特点
- 使用VS Stub进行单元测试
单元测试介绍
测试类型很多,单元测试是开发人员使用程序自动测试自己的代码,用一张图说明:
上面的method代表的是一个独立的逻辑,并不是说所有的方法都需要测试,比如私有方法,他应该属于其他的独立逻辑,可以通过其他的方法就行测试
单元测试是代码质量的强有力的保证,是重构代码的信心保障,好的单元测试个人认为应该有以下的特点:
- 运行速度要快,如果你的测试运行需要一整天,以后肯定不愿意写case,也不愿意再运行和维护
- 测试case应该互相不依赖,不要出现运行A case 先得运行B case的情况
- 测试case不应该依赖外部资源,比如service,DB,应该随时都可以运行(比如断网)
- 单元测试应该和生产代码一样重要,要随着代码的维护而维护
在VS中使用Stub特性进行单元测试:
1. 先写一段用于测试的代码
一个用于发送email的接口
/// <summary>
/// interface of email handler
/// </summary>
public interface IEmail
{
bool SendEmail(string reveiver, string emailBody, string subject);
}
Email发送的实现,调用Email service发送邮件
/// <summary>
/// real email handler
/// </summary>
class EmailImp : IEmail
{
public bool SendEmail(string reveiver, string emailBody, string subject)
{
//call email remote service here to send email
return true;
}
}
业务通知类,调用EmailImp发送邮件,发送成功,返回1,失败返回0,当然真正的业务肯定要做其他事情。
public class Notifier
{
public IEmail EmailHandler { get; set; } public Notifier()
{
this.EmailHandler = new EmailImp();
} public int Notify()
{
var sendResult = this.EmailHandler.SendEmail("ut@cnblogs.com", "email body", "emailSubject");
if (sendResult)
{
return 1;
}
else
{
return 0;
}
}
}
2. 现在要测试Notify方法,简单的步骤,生成测试solution和基本测试代码:
3. 上面的Notify至少应该对应两个Case:
- 当Email Service返回true
- 当Emial Service返回false
上面说到,单元测试不应该依赖于外部Service,DB.等。但是程序一般肯定依赖这些。如果这些外部Service down了。DBdown了。程序怎么测试。在测试的时候如何控制Email Service 按照我们的需要来返回True、False。这就是Stub要解决的问题。Stub是存根打桩的意思,打桩是测试里面很重要的一个概念。
4. VS可以通过增加Fake程序集来完成对程序的Stub:
5. 增加fake程序集之后就可以看到:
6. 接下来sub的使用,直接通过代码来展示
上面的例子很清楚,两个case完全不依赖于外部email service。随心所欲的指定email service 的返回值,从而很轻松的验证了我们自己的逻辑。
Stub主要思想就是在运行时针对接口动态注入,动态的用我们指定的Stub类来替换真正的执行类来完成我们指定的功能。
想通过Stub进行测试,被Fake的对象必须基于接口编程。
当然基于接口编程,上面的Stub程序员也可以自己实现,何必呢,VS已经帮我们实现了。
那问题来了。如果代码没有基于接口进行编程,怎么办?是不是没有办法像Stub这么进行替换模拟呢。下一篇文章再介绍另外一个功能:Shim.
Unit Test Via Visual Studio的更多相关文章
- [Visual Studio] 开启Visual Studio 2012通过右键菜单创建单元测试(Unit Test)
Visual Studio 2012可以说是迄今为止微软VS开发工具中用户体验最好的产品,无论是速度还是体验以及功能,都非常出色,但是,使用了一段时间后发现有一个之前版本VS都有的功能却在Visual ...
- Visual Studio 中的单元测试 UNIT TEST
原文:Visual Studio 中的单元测试 UNIT TEST 注:本文系作者原创,可随意转载,但请注明出处.如实在不愿注明可留空,强烈反对更改原创出处.TDD(Test-Driven Devel ...
- Visual Studio Code Unit Testing
1.NUnit project.json { "version": "1.0.0-*", "testRunner": "nunit ...
- Xamarin+Prism开发详解三:Visual studio 2017 RC初体验
Visual studio 2017 RC出来一段时间了,最近有时间就想安装试试,随带分享一下安装使用体验. 1,卸载visual studio 2015 虽然可以同时安装visual studio ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始
时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...
- Visual Studio “14” CTP 4
微软发布于10月6日发布了Visual Studio "14"CTP 4,本次发布的更新主要包括:ASP.NET vNext runtime和一些工具的优化(ASP.NET vNe ...
- Visual Studio 2015 开发 ASP.NET 5 有何变化?
本篇博文目录: ASP.NET 5 模版 ASP.NET 5 目录结构 前端管理工具 无编译开发 Microsoft Git Provider 智能感知和错误信息 Smart Unit Testing ...
- 软件工程-构建之法 Visual Studio开发平台的安装与单元测试
一.前言 自从开始了大三下的生活,学校开设一门课程“软件工程”,刚好我们是第一届进行课程改革,不在像以前那样背背概念,考前进行好好突击,然后考试就能过,最后毕业了发现软件工程课程到底我们在其中学习了什 ...
随机推荐
- Andorid Async-HttpClient阅览
Async-httpclient它是一个用于Android应用程序开发http访问开源框架.开源GitHub在,因为今天GitHub下载没有看到.我在这里提供下载地址.是之前从GitHub上下载的,版 ...
- 玩转Web之Json(二)----jquery easy ui + Ajax +Json+SQL实现前后台数据交互
最近在学Json,在网上也找过一些资料,觉得有点乱,在这里,我以easy ui的登录界面为例来说一下怎样用Json实现前后台的数据交互 使用Json,首先需要导入一些jar包,这些资源可以在网上下载到 ...
- C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器
STL实践与分析 --容器适配器 引: 除了顺序容器.标准库还提供了三种顺序容器适配器:queue,priority_queue和stack.适配器是标准库中的概念.包含容器适配器,迭代器适配器和函数 ...
- Android - 支持不同的设备 - 支持不同的平台版本
在最新版本的Android为app提供很好的新API时,也应该继续支持旧版本的Android直到大部分设备已经更新了.这里将要介绍如何在使用最新API带来的优点的同时继续支持老版本. Dashboar ...
- 白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连续7-电话问卷调查
[例7-3 文本编辑框创建一个简单的调查问卷] 01 <!DOCTYPEhtml> 02 <html> 03 <head> 04 ...
- 求n阶勒让德多项式
Time Limit: 1 Sec Memory Limit: 128 MB Submit: 161 Solved: 105 [Submit][Status][Web Board] Descrip ...
- dlmalloc 2.8.6 源代码具体解释(6)
本文章由vector03原创, 转载请注明出处. 邮箱地址: mmzsmm@163.com, 欢迎来信讨论. 3.4 sys_alloc sys_alloc是dlmalloc中向系统获取内存的主要接口 ...
- C++11并行编程-条件变量(condition_variable)详细说明
<condition_variable >头文件主要包含有类和函数相关的条件变量. 包括相关类 std::condition_variable和 std::condition_variab ...
- js比量undefined种类
js比量undefined种类 if (reValue== undefined) { alert("undefined"); } 发现推断不出来.最后查了下资料要用type ...
- Java爬虫,信息抓取的实现(转)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23272657 今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点 ...






