2016-07-22 222 views
1

我有一個方法:使用的Mockito與Object參數模擬方法

public class Sender{ 
    public Object send(Object param){ 
    Object x; 
    ..... 
    return (x); 
    } 
} 

我想寫使用的Mockito使得返回類型值,此方法單元測試是基於類類型的放慢參數的。所以我這樣做:

when(sender.send(Matchers.any(A.class))).thenReturn(value1); 
when(sender.send(Matchers.any(B.class))).thenReturn(value2); 

但返回值不考慮參數類類型的總是值2。如何做到這一點得到這個類返回值1 B類參數類型參數和值2。

回答

1

when(sender.send(Matchers.any(A.class))).thenReturn(value1);

會的Mockito試圖嘲笑的方法與簽名send(A param),不send(Object param)

你需要的是返回一個不同的基於你參數類的值。你需要使用這個答案。

Mockito.doAnswer(invocationOnMock -> { 
    if(invocationOnMock.getArguments()[0].getClass() instanceof A) { 
     return value1; 
    } 
    if(invocationOnMock.getArguments()[0].getClass() instanceof B) { 
     return value2; 
    } 
    else { 
     throw new IllegalArgumentException("unexpected type"); 
    } 
}).when(mock).send(Mockito.anyObject()); 
+0

正是我在想什麼,但卻懶得寫:-) –

+0

@noscreenname啊!你可以將其轉換爲不使用lambda表達式嗎?我瞭解意圖,但無法複製它。 – Sherlock123

+0

@ Sherlock123我可以,但如果你查看Mockito.doAnswer()文檔,你也可以;) – noscreenname

0

一對夫婦的選擇:

  1. 不要使用any。使用您在測試中使用的AB的實例。

  2. 使用Answer對象,該對象允許您指定要返回的內容。

相關問題