【问题标题】:EasyMock's niceMock equivalent for RhinoMocksEasyMock 与 RhinoMocks 等效的 niceMock
【发布时间】:2012-01-27 14:19:31
【问题描述】:
EasyMock 框架(Java 的模拟)有一个非常巧妙的方法createNiceMock,它是:
创建一个实现给定接口的 mock 对象,默认禁用顺序检查,并且 mock 对象将返回 0、null 或 false 用于意外调用。
我想知道 Rhino Mocks 框架中的一些等效方法可以用 0、null 或 false 模拟意外调用(我对 顺序检查 不感兴趣,但如果它会不会也可以)
【问题讨论】:
标签:
mocking
rhino-mocks
easymock
【解决方案1】:
这些是dynamic mock的特征:
动态模拟 - 松散的重播语义。通过调用 DynamicMock() 创建
松散重放语义:接受重放状态期间的所有方法调用。如果给定方法没有特殊处理设置,则返回 null 或零。必须调用所有预期的方法,对象才能通过验证。
在早期版本中,您必须明确创建一个:
var mocks = new MockRepository();
var service = mocks.DynamicMock<IService>();
现在,默认情况下,只要您使用 MockRepository.GenerateMock<T>() 方法创建模拟,就假定模拟是动态模拟。预期调用顺序也无关。假设我们的期望设置如下:
var dependency = MocksRepository.GenerateMock<IDependency>();
dependency.Expect(d => d.SecondMethod());
dependency.Expect(d => d.FirstMethod());
测试代码如下例
public void DoWork()
{
this.Dependency.FirstMethod();
this.Dependency.SecondMethod();
this.Dependency.ThirdMethod();
}
不会导致测试失败。顺序无关紧要,意外调用将被忽略并返回默认值。