2015-06-23 4 views
2

Я хочу использовать mockito и заглушить метод. Я хочу, чтобы метод возвращал разные значения на основе stubbing. Но он всегда возвращает первый вывод. Ниже, как моя установкаИспользование Mockito для нескольких вызовов одного и того же метода и разных выходов

Class Controller{ //this is singleton class 

private final Foo foo=AFacftory.getFoo(); //this variable is initialized only once for the whole life cycle 

//Some code below that I want to test is here 
foo.functionInFoo() 



} 

    Class Foo{ 
    int functionInFoo(){ 

    } 
} 

Test1 
Foo foo=Mockito.mock(Foo.class) 
TestSettings.Provider.get().setTestBeanProvider(Foo.class, foo); 
Mockito.when(foo.functionInFoo()).thenReturn(XXX); 
hitAUrl(); 
//do some testing here using xxx. 

Test2 
Foo foo=Mockito.mock(Foo.class) 
TestSettings.Provider.get().setTestBeanProvider(Foo.class, foo); 
Mockito.when(foo.functionInFoo()).thenReturn(YYY); 
hitAUrl(); 
//do some testing here using YYY. 

Переменная Foo конкретизируется только один раз в течение всего срока службы, поскольку это является частью контроллера. Итак, когда я запускаю свой первый тест, контроллер инициализируется, когда я нажимаюAUrl(), и он получает посмеянный экземпляр Foo и возвращает XXX. Но когда я запустил второй тест, он все равно будет иметь предыдущий экземпляр mock и снова вернуть XXX. Я хочу, чтобы он вернул YYY. Если я перезапущу сервер после Test1, он вернет YYY. Но это должно работать без перезапуска. Пожалуйста, дайте мне знать, как я могу это исправить. Любая помощь действительно ценится.

+0

Этот вопрос здесь ответил (проверьте 2-й ответ) http://stackoverflow.com/questions/4216569/how-to-tell-a-mockito-mock-object-to-return-something-different-the- следующее время она? RQ = 1 – Srikanta

ответ

0

Я не уверен, что статические методы фабрики можно издеваться с использованием Mockito. Но я всегда использую PowerMockito [PowerMock + Mockito] для моделирования статических методов & частных методов.

Foo foo = Mockito.mock(Foo.class); 
PowerMockito.mockStatic(AFacftory.class); 
PowerMockito.when(AFacftory.getFoo()).thenReturn(foo); 
6

Mockito.when(foo.functionInFoo()).thenReturn(XXX, YYY);

Это вернет XXX когда foo.functionUnFoo() вызывается в первый раз и YYY каждый раз после этого.

Смежные вопросы