如何测试这部分代码

时间:2010-03-16 15:46:00

标签: java junit

您好我正在编写junit测试如何测试此方法..这只是此方法的一部分:

public MyClass{

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

我将如何进行测试?读取数据是MyClass中的私有方法吗?

3 个答案:

答案 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>