MoQ(基于.net3.5,c#3.0的mock框架)简单介绍.docVIP

MoQ(基于.net3.5,c#3.0的mock框架)简单介绍.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们的单元测试的速度会很慢,所以我们往往希望将持久化部分隔离开,做单元测试的时候不真正的将数据持久化。这种隔离我们一般使用抽象的方式,也就是利用接口或抽象类将持久化层隔离开,然后利用mock来模拟相应的接口或抽象类来完成相应的持久化类。MoQ就是这种Mock框架之一,MoQ使用了C#3.0,跟NMock相比MoQ使用起来更简单,而且是强类型的方式的,源码和dll可以到/p/moq/下载。现在MoQ最新的发布版本是3.1版,4.0还处在beta版中,所以我们这里使用的是3.1版。 下面我们就来介绍一下MoQ的具体用法: 一、基础知识 在使用MoQ之前我们必须要先在测试程序中引入Moq.dll,使用MoQ的主要命名空间是Moq,其中最重的类就是MockT,我们可以用这个类来模拟接口。 1、方法 ???public?interface?ITest ????{ ????????string?Test(); ????} 测试代码: ? 1??????[TestMethod()] 2?????????public?void?TestTest() 3?????????{ 4?????????????var?test?=?new?MockITest(); 5?????????????test.Setup(p?=?p.Test()).Returns(lfm); 6?????????????Assert.AreEqual(lfm,?test.Object.Test()); 7?????????} ? 2、匹配参数 ? ?public?interface?IMatchTest ????{ ????????string?Test(int?test); ????} ? var?testMatch?=?new?MockIMatchTest(); ????????????testMatch.Setup(p?=?p.Test(It.Isint(i?=?i?%?2?==?0))).Returns(偶数); ????????????testMatch.Setup(p?=?p.Test(It.Isint(i?=?i?%?2?!=?0))).Returns(奇数); ????????????Assert.AreEqual(偶数,?testMatch.Object.Test(4)); ????????????Assert.AreEqual(奇数,?testMatch.Object.Test(3)); ?上边测试代码模拟实现IMathTest接口实例,其中如果Test方法的参数是偶数,其返回值为“偶数”。这里的IT用来过滤参数的类,其具体解释可以参见MoQ的文档 3、属性 ?public?interface?IPropertiesTest ????{ ?????????int?Test?{?get;?set;?} ????} ? ????????????var?testProperties?=?new?MockIPropertiesTest(); ????????????testProperties.Setup(p?=?p.Test).Returns(1); ????????????Assert.AreEqual(1,?testProperties.Object.Test); 或者 var?testProperties?=?new?MockIPropertiesTest(); ????????????testProperties.SetupProperty(p?=?p.Test,1); ????????????Assert.AreEqual(1,?testProperties.Object.Test); ? 4、Callback 当执行某方法时调用其内部输入的Action委托 ? int?count?=?0; ????????????var?testProperties?=?new?MockIPropertiesTest(); ????????????testProperties.Setup(p?=?p.Test).Returns(1).Callback(()=count++); ????????????Assert.AreEqual(1,?testProperties.Object.Test); ????????????Assert.AreEqual(1,?count); ? 在调用Test方法是执行了count++ 5、Verification 判断某方法或属性是否执行过 如果代码如下: ? 1?var?testProperties?=

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档