簡體   English   中英

如何分離實現相同接口的兩個類的函數模擬?

[英]How to separate function mocks of two classes that implement the same interface?

我的問題實際上是在標題中定義的。 我正在與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”。

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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM