Как смоделировать вызов метода в конструкторе с помощью easymock? - PullRequest
2 голосов
/ 08 июня 2011

У меня есть класс, который получает фабрику в качестве аргумента, который вызывается внутри конструктора. Он должен быть вызван там, потому что объект должен быть полностью инициализирован, прежде чем его можно будет использовать. Что-то вроде:

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, поскольку такие ожидания не были установлены.

Вопрос в том, как вы можете имитировать вызовы методов в конструкторе?

1 Ответ

3 голосов
/ 08 июня 2011

Вы можете EasyMock.reset(fooFactory) в setUp после создания MyClass.

...