EasyMock文档很清楚
对于使用EasyMock创建的模拟对象,无法更改三个对象方法equals(),hashCode()和toString()的行为,即使它们是创建模拟对象的接口的一部分.
我正在尝试测试的代码使用equals()来比较我的模拟对象.我想做点什么
expect(mock.equals(obj)).andReturn(false);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到一个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);
Run Code Online (Sandbox Code Playgroud)
但这似乎不够优雅.我觉得我缺少一些重要的东西(比如EasyMock不允许你覆盖那些对象方法的原因).有更好的解决方案吗?