您好我正在编写junit测试如何测试此方法..这只是此方法的一部分:
public MyClass{
public void myMethod(){
List<myObject> list = readData();
}
}
我将如何进行测试?读取数据是MyClass中的私有方法吗?
答案 0 :(得分:1)
您始终可以测试List对象,以查看它是否包含readData()应插入列表的所有元素。创建一个返回列表的公共方法,您可以将该列表中的长度和元素与您期望的内容进行比较。
答案 1 :(得分:0)
除非我们对该方法有更多了解,否则您真正需要测试的是readData的返回格式是否适合您的通用列表。否则,如果不了解更多关于私人方法的内容,很难推荐任何东西。
答案 2 :(得分:0)
正如所写,除非myMethod()
以Frank Grimm提到的方式更改实例状态,否则测试readData()
没有意义。要做的一件事是更改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
。 p>