摘要: Sometimes you have a method on your mocked object for which you don't care how or if it was called, but you may want to set a return value (or an exception to be thrown) in case it is called. For example, you may have some interaction that you've already verified, or you are testing some oth 阅读全文
posted @ 2011-05-30 16:44 ido 阅读(415) 评论(0) 推荐(0) 编辑
摘要: (一)Do(delegate)有时候在测试过程中只返回一个静态的值是不够的,在这种情况下,Do()方法可以用来在方法调用时添加自定义的行为。一般来说,Do()方法会替换方法调用。它的返回值会从模拟的调用中返回(即使是有异常发生也是这样)。Do()的参数委托委托的方法的签名须和方法的签名匹配。只有当签名匹配时才能生效,且一个匹配生效一次。看官方给出的例子:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->publicclassSpeaker{pr 阅读全文
posted @ 2011-05-30 15:44 ido 阅读(526) 评论(1) 推荐(0) 编辑
摘要: (一)安装结果(SetupResult)有时候在模拟对象中需要一个方法的返回值,而不在意这个方法是否被调用。就可以通过安装结果(SetupRestult)来设置返回值,而绕开期望安装,且可以使用多次。从依赖的角度来说是这样的:方法a(或属性)被方法b使用,而在其它的位置c处方法a又会被使用,而在c处使用之前,不保证是否在b处使用且修改了方法a的返回值。意思就是保证方法a的返回结果是固定的,是忽略它的依赖,而在它该用的位置使用它恒定的值。安装结果可以达到这种效果。Code highlighting produced by Actipro CodeHighlighter (freeware)htt 阅读全文
posted @ 2011-05-30 15:41 ido 阅读(547) 评论(0) 推荐(0) 编辑
摘要: (一)属性Property属性也是一种方法。所以对于属性的期望,和方法是一样的。方法和属性的期望在前几篇随笔中已经大量使用。通常的读或写属性器的期望Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->[Test]publicvoidTestEvent(){MockRepositorymocks=newMockRepository();IList<int>_list=mocks.DynamicMock<IList<int&g 阅读全文
posted @ 2011-05-30 15:37 ido 阅读(1832) 评论(0) 推荐(0) 编辑
摘要: (一)次序(Ordered)在rhinomock中,可以按次序调用方法。默认条件下,方法调用没有顺序。如果按次序录制,那么在调用方法时必须按录制时相同的次序进行。请看:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->publicinterfaceICustomer{ stringShowTitle(stringstr); intUnid{get;set;} stringCustomerName{get;set;} stringAddress{ 阅读全文
posted @ 2011-05-30 15:33 ido 阅读(425) 评论(0) 推荐(0) 编辑
摘要: MockRespository有四种泛型方法:·CreateMock<T>·CreateDynamicMock<T>·PartialMock·Stub在3.5中,三种已经过时的方法分别由以下方法替代:·StrictMock<T>·DynamicMock<T>·PartialMock<T>·Stub<T>它们各自对应静态工厂方法:·MockRepository.GenerateStrictMock<T>·MockR 阅读全文
posted @ 2011-05-30 15:25 ido 阅读(724) 评论(0) 推荐(0) 编辑
摘要: (一)MockRepositoryRhinoMock的主要的类,是Mock仓库,用于创建mock对象,录制,重放,验证等。(1)创建MockCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->MockRepositorymock=newMockRepository();(2)创建mock对象Mock的目的就是创建mock对象,然后期望,录制重放等。创建mock对象有很多方法,以前的版本中通过:Code highlighting produced 阅读全文
posted @ 2011-05-30 15:21 ido 阅读(445) 评论(0) 推荐(1) 编辑
摘要: 场景:最近在测试一个.NET的Http Module,这个Module是用来做URL重写的。刚开始进展的比较顺利,因为该Module里面的方法参数基本上都是String,后来这个Module进行了一下重构,所有参数都变成了HttpContext了,这就直接导致原来的单元测试都跑不起来了,接着就开始了弄HttpContext了。1. 采用Visual Studio自带的ASP.NET单元测试刚开始我看了一下被测试的代码,虽然说用到了HttpContext,但是有很多地方我都可以绕过去的,意思就是这个HttpContext只是名以上需要的一个参数,只要它不是NULL就可以了,并不影响我的测试,所以 阅读全文
posted @ 2011-05-30 14:34 ido 阅读(3455) 评论(1) 推荐(0) 编辑
摘要: Mock: 记录了接口被调用的顺序, 次数, 参数和返回值. 这些都必须在随后的测试上得到验证. 如果在Record时记录了一次接口的方法调用, 而测试对象实际上并没调用该接口的方法的话, 验证会失败.Stub: 记录了接口被调用的信息, 但不验证. 测试对象可能调用了这个接口, 也可能没有调用. 阅读全文
posted @ 2011-05-30 10:39 ido 阅读(435) 评论(0) 推荐(0) 编辑
摘要: mock与stub代表的是不同的unit testing方法(分别是 interaction-based 和state-based)。State-Based Testing一个例子:publicclassOrderStateTesterextendsTestCase{privatestaticStringTALISKER="talisker";privatestaticStringHIGHLAND_PARK="HighlandPark";privateWarehousewarehouse=newWarehouseImpl();protectedvoids 阅读全文
posted @ 2011-05-30 10:25 ido 阅读(2795) 评论(0) 推荐(0) 编辑