2010-03-16 295 views
0

你好,我書面方式JUnit測試這部分該如何測試這個方法..這僅僅是這個方法的一部分:如何測試的代碼

public MyClass{ 

public void myMethod(){ 
List<myObject> list = readData(); 
} 
} 

我將如何彌補這方面的測試? ReadData是MyClass中的私有方法?

+1

我認爲你需要擴展你的例子。就目前而言,該方法根本沒有可見的行爲(除了返回),所以沒有什麼可以測試的。 – 2010-03-16 15:48:35

+0

'readData'是否修改MyClass實例的狀態?如果是這樣,你應該測試改變的狀態。如果沒有,我不明白'readData'是做什麼的。 – 2010-03-16 15:50:04

+0

列表是錯誤的。您應該在尖括號之間指定一個類,例如列表。 – 2010-03-16 16:38:47

回答

0

正如所寫,測試myMethod()沒有意義,除非readData()按照Frank Grimm提到的方式更改實例狀態。有一件事要做的是改變myMethod(),以便將list放入List實例變量中。那麼你可能會做這樣的事情:

@Test 
public void testThatReadDataReturnsACorrectList(){ 
    MyClass inst = new MyClass(); // Add args to ctor call if needed - maybe a file path that readData() will use? 
    inst.myMethod(); 

    // Create a list of MyClasses that match what you expect readData() to return: 
    List<MyClass> expectedList = new List<>(); 
    expectedList.Add(new MyClass(/* Some arguments */)); 
    expectedList.Add(new MyClass(/* Some more arguments */)); 
    expectedList.Add(new MyClass(/* Some other arguments */)); 

    // Assert that the list you created matches the list you get back from 
    assertArrayEquals("Did not get the list expected", expectedList.ToArray(), inst.getList().ToArray()); 

} 

你仍然不得不寫MyClass.getList()返回List實例變量。

爲了增強可用性,您可以使MyClass構造函數接受一個實現類似IMyReadInterface的接口的對象。 readData()將使用該對象。然後在你的測試中,你可以實例化一個也實現了IMyReadInterface的模擬,配置模擬以提供所需的數據以便readData()正常工作,並且用該模擬構建inst

1

您可以隨時測試List對象以查看它是否包含readData()應該插入到列表中的所有元素。創建一個返回列表的公共方法,您可以將該列表中的長度和元素與您期望在其中的內容進行比較。

0

除非我們對方法有更多的瞭解,否則您真正需要測試的是從readData返回的格式適合您的通用列表。否則,如果不知道私有方法中發生了什麼,就很難推薦任何東西。