在上篇介绍完NUnit 之后,接着介绍的是一款相当不错的mock工具—>Moq
依然按照之前的规矩来介绍
什么是Moq?
moq 是一款相当不错的Mock 工具。当然有人会问,Mock 又是什么呢?从字面上来说,是“假的”的意思,在Coding 中,Mock 的意思即是做一个假的对象,来得到返回值。
为什么要Moq | Mock ?
1、真实的对象创建可能超级麻烦
2、我们没有必要去观测一个底层的对象
3、对象产生了一些不可控制的变化(比如Random)
4、真实的对象压根还没写呢。
举个简单的例子,在经典的三层架构中,最麻烦的莫过于DAL 层,因为他需要跟数据库打交道,所以涉及到很多的东西,所以可能很麻烦;或者这个时候甚至DAL 层还很不稳定,经常出现加字段,变更属性等奇怪的需求导致BLL几乎无办法测试;也有可能你现在的数据库根本禁不起测试数据的折腾,一旦写入了测试数据,则数据库里原有的数据就乱了。这个时候,别放弃你测试BLL的计划而转身去与DAL折腾,Mock军队的Moq,就会来拯救你。
怎样使用Moq
使用Moq 有几个先决条件:
1、被Mock 的类不能是seal 的。人民群众纷纷表示没影响,因为我们在做设计的时候,都知道应该做成松耦合,抽象出接口,我们只需要Mock 这个接口就ok了
2、方法必须是virtual 的。人民群众再次纷纷表示没影响,原因同上
3、不能模拟静态方法。影响较小,只不过有的地方确实还是不太方便,比如说Mock 某个Helper 类,只不过话说回来了,都Helper 类的,也不需要去Mock 吧。
有了这几条,我们就来正式的介绍Moq的用法
首先,需要我们来抽象出一个实现类的接口,比如这里的DAL