2013-07-03 2 views
1

На самом деле моя проблема определена в заголовке. Я пишу модульные тесты с Junit, PowerMock & Mockito. Я издеваюсь над таким классом,Как отделить функции mocks от двух классов, реализующих один и тот же интерфейс?

class User{ 
     public final synchronized String enter(AbstractClass ac){ 
     //..... 
     } 
} 

// In test function 
User mockUser = PowerMockito.mock(User.class); 
PowerMockito.when(mockUser.enter(Mockito.any(Class1ImplementsSameAbstract.class))) 
      .thenReturn("Some Str 1"); 
PowerMockito.when(mockUser.enter(Mockito.any(Class2ImplementsSameAbstract.class))) 
      .thenReturn("Some Str 2"); 

System.out.println(mockUser.enter(new Class1ImplementsSameAbstract())); 
System.out.println(mockUser.enter(new Class2ImplementsSameAbstract())); 

Как отделить эти два условия «когда»? Когда я запускаю этот тест, обе строки «System.out ..» печатают «Some Str 2».

ответ

4

any* семейство matchers не делают проверку типов, вы должны использовать isA(Class<T>) вместо:

PowerMockito.when(mockUser.enter(Mockito.isA(Class1ImplementsSameAbstract.class))) 
     .thenReturn("Some Str 1"); 

Или же, использовать фактические аргументы, например:

final Class1ImplementsSameAbstract klass1 = new Class1ImplementsSameAbstract(); 

PowerMockito.when(mockUser.enter(klass1)).thenReturn("Some Str 1"); 
+0

Он работает с "Isa" функция. Спас мой день, спасибо :) – emre

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