У меня есть класс, который получает фабрику в качестве аргумента, который вызывается внутри конструктора. Он должен быть вызван там, потому что объект должен быть полностью инициализирован, прежде чем его можно будет использовать. Что-то вроде:
class MyClass {
private Foo foo;
MyClass(FooFactory fooFactory, Bar bar) {
this.foo = fooFactory.newFoo(bar);
}
}
Экземпляр Foo не может быть напрямую передан в конструктор, поэтому учтите, что это ограничение проблемы. MyClass не может быть протестирован с использованием EasyMock, потому что fooFactory будет имитацией, которая не была инициализирована в setUp:
private MyClass myClass;
public void setUp() {
FooFactory fooFactory = mock(fooFactory);
Bar bar = new Bar();
myClass = new MyClass(fooFactory, bar)
}
Таким образом, при вызове setUp вызов для fooFactory.newFoo(bar)
внутри конструктора завершится с ошибкой IllegalStateException, поскольку такие ожидания не были установлены.
Вопрос в том, как вы можете имитировать вызовы методов в конструкторе?