void单元的Java单元测试

时间:2014-02-20 07:31:17

标签: java unit-testing

首先,我想就我的语言技巧道歉,但我的母语不是英语。

我有一些源代码,这是:

public void hello(List l){    
    switch (l.get(0) {    
    case "hello":    
         System.out.println("Hello!");    
    case "world":    
        System.out.println("World");    
        break;    
    }    
}

我必须编写一个单元测试,可以测试这段代码。但我的技能还不够。有人可以帮帮我吗?一些例子或书籍或其他东西。我不知道如何开始它!

我很感激。

由于

5 个答案:

答案 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,否则它会掉落并第二次打印。