2017-03-18 73 views
1

想問你一個問題。如何從可測試類中模擬調用方法?

我該如何正確地從可測試類調用的方法中返回一些數據?

比如我有一個結構:

Class SomeClass { 
    public void method1(){ 
    //some logic here 
    List<Object> howToReturnHereValues = gatData(); 
    //some logic here 
    } 
    public List<Object> getData(){ 

     return List<Object>; 

    } 
} 

現在我想測試method1(),但我不知道該怎麼嘲笑調用getData()返回List<Object>

有什麼建議嗎?

+0

看看Mockito的'Spy'。這允許你模擬一個「真實」對象的一些方法 – Rouliboy

回答

1

爲此,您可以使用間諜,喜歡這裏解釋:https://static.javadoc.io/org.mockito/mockito-core/2.7.17/org/mockito/Mockito.html#13

例子:

@Test 
public void testMethod1() throws Exception { 
    SomeClass someClass = new SomeClass(); 
    SomeClass spy = Mockito.spy(someClass); 
    Mockito.when(spy.getData()).thenReturn(Arrays.asList("blaat", "blabla")); 
    spy.method1(); 
} 

這將返回可由邏輯可以用「blaat」和「布拉布拉」的名單在你的方法1中。

+0

感謝您的示例 – Andrew

2

現在我想測試method1(),但我不知道如何模擬調用 getData(),它返回List。

嘲笑正在測試的類的公共方法是一個壞主意。

單元測試應測試行爲和模擬依賴性。在這裏,當你嘲笑被測試類的行爲時,你只測試一部分行爲。

如果類是我們的你可以:

  • 這兩項測試中這種方法不嘲諷getData()稱爲公共方法。
  • 或將getData()公用方法移動到另一個類中,然後模擬這種新的依賴關係,如果您不想在每個調用它的測試方法中重複測試getData()方法。

如果類是不可修改和嘲笑所謂的真正需要,您可以使用框架的Mockito的spy()方法的對象接受測試,以模擬嘲笑的行爲,具體的方法。

+0

的答案感謝您的建議 – Andrew

相關問題