EasyMock 文档非常清楚
对于使用 EasyMock 创建的模拟对象,无法更改三个对象方法 equals()、hashCode() 和 toString() 的行为,即使它们是为其创建模拟对象的接口的一部分。
我尝试测试的代码使用 equals() 将我的模拟对象与其他对象进行比较。我想做类似的事情
expect(mock.equals(obj)).andReturn(false);
当我这样做时,我得到一个 IllegalStateException。鉴于文档中的内容,这并不奇怪。
有人对替代方法有任何建议吗?是否有另一种方法来控制模拟对象在调用 equals() 时返回的内容?我想我可以创建一个覆盖 equals() 的子类
class FooImplOverrideEquals extends FooImpl {
public boolean equals;
public boolean equals(Object obj) { return equals; }
}
FooImplOverrideEquals mock = createMock(FooImplOverrideEquals.class);
mock.equals = false; // instead of expect(mock.equals(obj)).andReturn(false);
但这似乎不优雅。我觉得我错过了一些重要的东西(比如 EasyMock 不允许你覆盖那些对象方法的原因)。有更好的解决方案吗?