EasyMock - изменение поведения для равняется () и другие Методы объекта

Документация EasyMock является довольно четкой это

Поведение для этих трех методов объекта равняется (), хэш-код () и toString () не может быть изменен для Фиктивных объектов, созданных с EasyMock, даже если они - часть интерфейса, для которого создается Фиктивный объект.

Код, что я пытаюсь протестировать использование, равняется () для сравнения моего фиктивного объекта с чем-то еще. Я хотел бы сделать что-то как

expect(mock.equals(obj)).andReturn(false);

Когда я делаю это, я получаю IllegalStateException. Не удивительно там, учитывая то, что говорит документация.

У кого-либо есть какие-либо предложения для альтернативного подхода? Там другой путь состоит в том, чтобы управлять тем, что возвратит фиктивный объект, когда будет равняться (), назван на нем? Я предполагаю, что могу создать подкласс, который переопределения равняется ()

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 не позволяет Вам переопределить те методы объекта). Существует ли лучшее решение?

6
задан Ed Wagner 9 June 2010 в 15:53
поделиться

1 ответ

Многие из насмешливых библиотек не поддерживают это, потому что обычно это плохая идея. Если вы выполняете сравнение equals (), то у вас есть объект-значение, а не настоящий соавтор, и вам лучше использовать реальный экземпляр. Если вы используете equals () для представления какой-либо другой концепции (isBestFriendsWith (other)), вы можете заглушить ее, если это необходимо.

4
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: