Unit Test Via Visual Studio
2015-05-01 20:01
661 查看
转载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.
分类: 单元测试
标签: 单元测试
相关文章推荐
- Create a simple unit test project with Visual Studio Unit Testing Framework
- 简易扩展Visual Studio UnitTesting支持TestMethodCase
- Unit Test in Visual Studio
- ASP.NET MVC 單元測試系列 (7):Visual Studio Unit Test
- VisualStudio UnitTest FrameWork
- enable parallel unit test running in visual studio 2010
- Visual Studio Unit Test VS NUnit
- 演练:使用 Visual Studio Team Test 进行单元测...
- NUnit和Visual Studio Unit Testing的兼容
- How to Use the Visual Studio .NET Application Center Test
- error MSB3073: 命令“REM Do not edit from the Visual Studio IDE! Customize via a JavaScriptCorePreLink.
- 使用 Visual Studio Team Test 进行单元测试和java中的测试
- 使用Microsoft.VisualStudio.QualityTools.WebTestFramework.dll中一些函数帮助分析Html(some fuctions in Microsoft.VisualStudio.QualityTools.WebTestFramework.dll help to analyze HTML)
- 错误6 error LNK1104: 无法打开文件“D:\My Documents\Visual Studio 2010\Projects\MFCTest\Debug\MFCTest.exe” D:
- Microsoft Visual Studio 2010 Load Test Feature Pack安装排错
- Visual Studio Code Unit Testing
- Exception when run load test use visual studio.
- 在使用Microsoft Visual Studio Test Controller 2010进行测试时,报如下错误: System.DllNotFoundException: 无法加载 DLL“Microsoft.VisualStudio.QualityTools.RecorderBarBHO100.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
- 四、Load test your app(Visual Studio Online负载测试)
- Web Performance Test Using Visual Studio- Part I