手头的项目越来越大,很多以前不会出现的问题开始浮现。
比如:我修改了一个基础的类库,却意外的影响了九重天外的客户项目,直接导致一个功能无法实现。我郁闷啊!!!
因此开始要有组织、有预谋、有计划的对项目过程进行测试驱动了。最终目标是,我修改了底层某个dll的某个方法,测试框架能够自动帮我找出来所有收到影响的类,全部执行一次回归测试,并发送一份漂亮的报告到我手里。
这个目标估计1、2个星期才能实现,不过现在先放出一个非常漂亮的MOCK核心代码。
研究过程
在不断收集各种资料过程中,学习了很多,例如以下关键字,有兴趣的兄弟可以自己搜索一下:
testdriven.net, nunit, typemock, cruiseControl.net, Confluence, JIRE, NUnitForms, WatiN, MBUnit, CSUnit, NBehave, Gallio
ranorex, dynamicProxy...
估计各位有时间看看上面的简介,就能够掌握现在测试驱动的大致发展。
- nunit的核心代码非常容易理解,大伙自己下载看看就行了。
- testdriven.net 的前身是:NUnitAddin, 如果要研究如何testdriven集成到vs,看看不错。
- WatiN的核心代码虽然我没有看,不过猜也能猜到,就是调用了IE的核,然后搜索上面的html标签操作。
- typeMock有点混蛋,源码混淆了,无法拿到核心技术,不过从介绍来看是源自了castle.DynamicProxy,那么各位可以参观一下一篇非常垃圾的文章,但是起码让我入门了: http://www.cublog.cn/u/23701/showart_1414436.html
- 最后,我来到了Moq,开始因为听说是.net3.5,就没有看源码,不过刚才研究了一下顿时非常兴奋。起码Moq能让我解决了50%的工作。
接下来就说下Mock技术和测试驱动中的作用。
Mock技术
我最不喜欢老外造名词,所以会用自己的体会去介绍。
mock的本质就是模拟目标对象的一个假对象。
这个性质在测试驱动中非常有用,例如我的代码是:
public DateTime GetNextFiredDate(DateTime now, IOrmScheduleTrigger trigger, int triggeredtimes)
{
return GetNextFiredDate(now, trigger.TriggerType, trigger.TriggerExpression, triggeredtimes);
}
{
return GetNextFiredDate(now, trigger.TriggerType, trigger.TriggerExpression, triggeredtimes);
}