你好,我书面方式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