首先,我想就我的语言技巧道歉,但我的母语不是英语。
我有一些源代码,这是:
public void hello(List l){
switch (l.get(0) {
case "hello":
System.out.println("Hello!");
case "world":
System.out.println("World");
break;
}
}
我必须编写一个单元测试,可以测试这段代码。但我的技能还不够。有人可以帮帮我吗?一些例子或书籍或其他东西。我不知道如何开始它!
我很感激。
由于
答案 0 :(得分:4)
如果方法是'void',那么你无法测试该方法是否返回正确的值。但是,您可以测试它是否抛出任何异常。如果要测试计算,则需要重构代码,以便计算是一个返回值的单独方法。
答案 1 :(得分:2)
您应该将代码分解为两种方法 - 一种打印第二种方法的结果,第二种方法可以轻松进行单元测试。
答案 2 :(得分:2)
你可以通过启动一个新的JVM并调用调用它然后捕获输出的代码来测试该方法,但是......
更简单地重构代码,以便可以测试它:提取一个返回String的方法,留下一个打印结果的包装器方法,但是你测试提取的方法。
答案 3 :(得分:1)
为了能够测试此方法,您必须能够告诉已经打印到System.out的内容。因此,您必须用另一个流替换System.out,在内存中写入,以便在调用方法后检查流的内容。这是可行的,但不是那么容易。
您可以使您的方法更具可重用性,并且更可测试,如果不是打印到System.out,它会返回一个String。您还可以传递一个PrintStream类型的附加参数,该方法将写入该参数,这将通过传递将写入字节数组的PrintStream来使测试更容易。
答案 4 :(得分:1)
您可以将输出流更改为这样的模拟(使用Mockito)。
PrintStream mockStream = Mockito.mock(PrintStream.class);
PrintStream original = System.out;
System.out = mockStream;
//call your method here:
hello(myList);
//check if your method has done its job correctly
Mockito.verify(mockStream).println("Hello!");
//clean up
System.out = orig;
此外,不要忘记在第一次案件之后放置break
,否则它会掉落并第二次打印。