Модульное тестирование: макетирование фабричного метода с использованием mockito или powermock - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть класс со следующей структурой

public class MyClass{
   private MyClass(){
   }

   public static MyClass getInstance(){
       return new MyClass();
   }

   //some instance method.
}

Используя powermock, я могу смоделировать «MyClass» следующим образом.

PowerMock.mockStaticClass(Myclass.class);

Но я не могу вернуть любой действительный объект, когда кто-то вызывает getInstance () в MyClass. т.е. как мне заполнить следующий бланк.

Mock.when(MyClass.getInstance()).thenReturn(<What do I return here>);

Возвращаемое значение необходимо, потому что мне нужно заблокировать / проверить некоторые методы экземпляра.

Может кто-нибудь помочь мне разобраться в этом?

1 Ответ

2 голосов
/ 16 сентября 2011

Вы можете смоделировать экземпляр , а также статический метод, и заставить смоделированный статический метод возвращать ссылку на макетированный экземпляр. Что-то вроде:

MyClass mock = PowerMock.mockClass(MyClass.class);

PowerMock.mockStaticClass(MyClass.class);
Mock.when(MyClass.getInstance()).thenReturn(mock);

(я никогда не использовал PowerMock, поэтому синтаксис может быть немного неправильным ...)

...