Я только что заметил, что вы утверждаете, что возвращается тот же макет . Вы также никогда не звоните replay()
, чтобы перевести макет в режим воспроизведения - если бы вы это сделали, он бы выдал исключение, как только Subject
попытается вызвать какие-либо методы для него.
Полагаю, вы ожидаете, что макет запомнит вызов setAnswer
и ответит с тем же результатом, когда вызывается getAnswer
, но насмешка не работает таким образом. Вы, вероятно, ожидаете вызова setAnswer("VALID")
. Примерно так:
public void test() {
DomainInterface mock = EasyMock.create("mock", DomainInterface.class);
// Expect that the subject will call setAnswer with an argument of "VALID"
mock.setAnswer("VALID");
EasyMock.replay();
Subject subject = new Subject();
subject.setDomainInterface(mock);
DomainInterface domain = subject.process();
assertEquals("Not the same instance", mock, domain);
// No need to assert the result of calling getAnswer - we've already asserted
// that setAnswer will be called.
}
Лично я становлюсь поклонником рукописных подделок для многих тестов - макеты отлично подходят для взаимодействия тестирования (он же протокол тестирования), но в этой ситуации это выглядит как простая подделка будет делать то же самое ... или, возможно, смесь, которая подделывает простой бит (свойство), но допускает насмешки для битов, которые требуют тестирования взаимодействия.