你好,我書面方式JUnit測試這部分該如何測試這個方法..這僅僅是這個方法的一部分:如何測試的代碼
public MyClass{
public void myMethod(){
List<myObject> list = readData();
}
}
我將如何彌補這方面的測試? ReadData是MyClass中的私有方法?
你好,我書面方式JUnit測試這部分該如何測試這個方法..這僅僅是這個方法的一部分:如何測試的代碼
public MyClass{
public void myMethod(){
List<myObject> list = readData();
}
}
我將如何彌補這方面的測試? ReadData是MyClass中的私有方法?
正如所寫,測試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
。
您可以隨時測試List對象以查看它是否包含readData()應該插入到列表中的所有元素。創建一個返回列表的公共方法,您可以將該列表中的長度和元素與您期望在其中的內容進行比較。
除非我們對方法有更多的瞭解,否則您真正需要測試的是從readData返回的格式適合您的通用列表。否則,如果不知道私有方法中發生了什麼,就很難推薦任何東西。
我認爲你需要擴展你的例子。就目前而言,該方法根本沒有可見的行爲(除了返回),所以沒有什麼可以測試的。 – 2010-03-16 15:48:35
'readData'是否修改MyClass實例的狀態?如果是這樣,你應該測試改變的狀態。如果沒有,我不明白'readData'是做什麼的。 – 2010-03-16 15:50:04
列表是錯誤的。您應該在尖括號之間指定一個類,例如列表。 –
2010-03-16 16:38:47