有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

void方法的Java单元测试

首先,我想为我的语言技能道歉,但我的母语不是英语

我有一点源代码,它是:

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

我必须编写一个单元测试,它可以对代码进行测试。但我的技术还不够。谁能帮帮我吗?一些例子、书或其他东西。我不知道该怎么开始

我很感激

谢谢


共 (5) 个答案

  1. # 1 楼答案

    为了能够测试这个方法,您必须能够告诉系统打印了什么。出来因此,您必须更换系统。由另一个流输出,写入内存,以便在调用方法后可以检查流的内容。这是可行的,但不是那么容易

    如果不打印到系统中,您将使您的方法更具可重用性和可测试性。输出时,它返回了一个字符串。您还可以传递一个额外的参数,类型为PrintStream,方法将在其中写入,这将通过传递将写入字节数组的PrintStream来简化测试

  2. # 2 楼答案

    您应该将代码分为两种方法—一种方法打印第二种方法的结果,第二种方法可以轻松地进行单元测试

  3. # 3 楼答案

    如果该方法为“void”,则显然无法测试该方法是否返回正确的值。但是,您可以测试它是否抛出任何异常。如果您想测试计算,您需要重构代码,使计算成为一个单独的返回值的方法

  4. # 4 楼答案

    您可以通过启动一个新的JVM并调用调用该JVM的代码来测试该方法,然后捕获输出,但是

    重构代码更简单,因此您可以测试它:提取一个返回字符串的方法,留下一个输出结果的包装器方法,但您测试提取的方法

  5. # 5 楼答案

    您可以将outputstream更改为类似这样的模拟流(使用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,否则它会失败,第二次也会打印出来