Ed *_*ner 6 java easymock equals
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不允许你覆盖那些对象方法的原因).有更好的解决方案吗?
许多模拟库不支持这一点,因为这通常是一个坏主意。如果您正在进行 equals() 比较,那么您拥有一个值对象,而不是真正的协作者,并且最好使用真实实例。如果您使用 equals() 来表示其他一些概念 (isBestFriendsWith(other)),那么您可以在适当的情况下对其进行存根。