VS11中新的unit test框架——Fakes Framework

单元测试中最关键的矛盾在于如何能够将功能测试与环境隔离,这样才能将功能测试更加独立,不与具体环境关联,例如文件处理的逻辑方法和具体采用什么api读取哪里存放文件相隔离,数据库环境,网络通讯环境这些都可以被隔离。那么如何实现隔离呢,就是一个办法,注入拦截,将调用重定向到一个测试code的代理方法里面,这样所有控制权都尽在掌握了。

VS2010的时候,微软就已经开始着手实现一个能够和vs的unit test framework集成工作的隔离框架了——Moles就是这个框架,而且到目前为止个人觉得除了运行效率欠佳,使用起来还是很方便的。但是他是以一个vs扩展的方式存在的,默认并没有包含在VS里面,其实按照目前软件项目的复杂程度来看,希望写unit test但是不应用隔离技术的话,基本上写不出真正意义上的unit test。所以在VS11 beta里面,微软这次将隔离技术集成到了默认的unit test framework中,同时做了一些改进,具体还没有使用过,从介绍文章刊,应该是将moles项目的整合进了VS同时进行了一些改进,很期待。

几个明显的改变:mock type在fakes里面改名为Shim,但是作用都是simulate 非interface,非abstract class的内容。还有将加在[TestMethod]特性上面的[HostType("Moles")]这个特性改为了在方法里面构建shim上下文的方法:

[Test]
public void Y2kCheckerTest() {
  using(ShimsContext.Create()) {
    ...
  } // clear all shims
}

还有创建这些mock对象的方法从原来AddmolesAssembly变成了配置xml,配合build,配置文件中可以灵活的指定在同一个Assembly中生成哪些Shim对象,哪些不用生成,这样应该更加有效率,灵活吧。

期待试用一下,体验一下效果。

 

参考文档:

http://msdn.microsoft.com/en-us/library/hh549175(VS.110).aspx

http://msdn.microsoft.com/en-us/library/hh549174(VS.110).aspx

http://msdn.microsoft.com/en-us/library/hh549176(VS.110).aspx

posted @ 2012-05-06 11:57  咚咚  阅读(734)  评论(0编辑  收藏  举报