2013-07-03 46 views
1

我的问题实际上是在标题中定义的。我正在写Junit单元测试,PowerMock & Mockito。我正在嘲笑这样的班级,如何分离实现相同接口的两个类的函数模拟?

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*家族的匹配不做类型检查的,你应该使用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

相关问题