EasyMock:将中间 anyTimes 与严格模拟相结合
EasyMock: combine intermediate anyTimes with strict mock
我想知道是否可以在 easyMock 中定义允许 "intermediate" 方法调用的行为。
假设我想验证 class:
中 doSomething
方法的行为
class MyObject {
MyOtherObject inner; // init as constructor param...
void doSomething() {
inner.call1();
inner.call2();
}
public String toString() {
return "MyObject{" + inner.getName() + "}";
}
}
我有这个测试代码:
MyOtherObject mocked = EasyMock.createStrictMock(MyOtherObject.class);
MyObject obj = new MyObject(myOtherObject);
// methods need to be called in this order
EasyMock.expect(mocked.call1()).once();
EasyMock.expect(mocked.call2()).once();
obj.doSomething();
当我更改 MyObject.doSomething()
的实现以使用 toString()
方法添加日志记录时,我的测试失败了,因为我没有添加对 MyOtherObject.getName()
.
的期望
因为我需要一个严格的模拟(带有方法顺序检查),简单地添加这个是行不通的:EasyMock.expect(mocked.getName()).andReturn("blahblah").anyTimes()
.
有什么优雅的方法可以解决这个问题吗?现在,我在每个 "real" 期望之前添加了这个 "anyTimes()" 语句,但它使我的测试不可读且难以维护。
或者我应该切换到另一个测试框架?
如果您不关心方法调用,例如日志记录,您可以使用存根将其排除在任何验证之外。所以:
EasyMock.expect(mocked.getName()).andStubReturn("blah");
这将防止您的测试因返回值而中断,但不会影响任何类型的模拟验证,包括严格的模拟排序。
我想知道是否可以在 easyMock 中定义允许 "intermediate" 方法调用的行为。
假设我想验证 class:
中doSomething
方法的行为
class MyObject {
MyOtherObject inner; // init as constructor param...
void doSomething() {
inner.call1();
inner.call2();
}
public String toString() {
return "MyObject{" + inner.getName() + "}";
}
}
我有这个测试代码:
MyOtherObject mocked = EasyMock.createStrictMock(MyOtherObject.class);
MyObject obj = new MyObject(myOtherObject);
// methods need to be called in this order
EasyMock.expect(mocked.call1()).once();
EasyMock.expect(mocked.call2()).once();
obj.doSomething();
当我更改 MyObject.doSomething()
的实现以使用 toString()
方法添加日志记录时,我的测试失败了,因为我没有添加对 MyOtherObject.getName()
.
因为我需要一个严格的模拟(带有方法顺序检查),简单地添加这个是行不通的:EasyMock.expect(mocked.getName()).andReturn("blahblah").anyTimes()
.
有什么优雅的方法可以解决这个问题吗?现在,我在每个 "real" 期望之前添加了这个 "anyTimes()" 语句,但它使我的测试不可读且难以维护。
或者我应该切换到另一个测试框架?
如果您不关心方法调用,例如日志记录,您可以使用存根将其排除在任何验证之外。所以:
EasyMock.expect(mocked.getName()).andStubReturn("blah");
这将防止您的测试因返回值而中断,但不会影响任何类型的模拟验证,包括严格的模拟排序。