gpt4 book ai didi

java - EasyMock - 改变 equals() 和其他对象方法的行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:33 26 4
gpt4 key购买 nike

EasyMock 文档非常清楚

The behavior for the three object methods equals(), hashCode() and toString() cannot be changed for Mock Objects created with EasyMock, even if they are part of the interface for which the Mock Object is created.

我尝试测试的代码使用 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 不允许您重写这些对象方法的原因)。有更好的解决方案吗?

最佳答案

许多模拟库不支持这一点,因为这通常不是一个好主意。如果你正在做一个 equals() 比较,那么你有一个值对象,而不是一个真正的合作者,你最好使用一个真实的实例。如果您使用 equals() 来表示其他一些概念 (isBestFriendsWith(other)),那么您可以在适当的时候 stub 。

关于java - EasyMock - 改变 equals() 和其他对象方法的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com