如何在jUnit中测试一个非常简单的void方法?

时间:2013-12-16 14:11:20

标签: java junit

我知道有一些关于无效方法单元测试的问题,但我的问题是不同的 我正在学习java,所以我的老板给了我一些对我的任务有不同要求的任务。

在我的实际任务中,有一个要求,即jUnit测试必须覆盖> 60%。所以我需要测试一种非常简单的方法来达到这个60%。方法如下:

public void updateGreen() {
    // delete this outprint if the Power Manager works
    System.out.println(onCommand + "-green");
    // p = Runtime.getRuntime().exec(command + "-green");
    // wait until the command is finished
    // p.waitFor();
}

由于实习问题,我无法使用Runtime任务执行命令。因此,此方法中只有System.out

我有多种类似的方法,因此这种方法的测试将覆盖整个代码的10%以上。

测试这样的方法有用吗?是的,怎么样?

3 个答案:

答案 0 :(得分:9)

如果有很多这样的方法,那么你可能想要在这里测试的是updateScreen()使用正确的字符串,“some-command-green”并且System.out正在调用。为此,您可能需要将System.out提取到对象字段中并对其进行模拟(即使用Mockito的spy())来测试提供给println的字符串。

class MyClass{
     PrintStream out = System.out;

     public void updateGreen() { ... }
}

在测试中:

@Test
public void testUpdate(){
     MyClass myClass = new MyClass();
     myClass.out = Mockito.spy(new PrintStream(...));

     // mock a call with an expected input
     doNothing().when(myClass.out).println("expected command");

     myClass.updateGreen();

     // test that there was a call
     Mockito.verify(myClass.out, Mockito.times(1)).println("expected command");
}

答案 1 :(得分:0)

如果方法成功运行,则返回true,否则返回false。这很容易测试。

您还可以测试此方法的输出,如下所述: Should we unit test console outputs?

但根据我的经验,让方法返回乐观或悲观的值(真/假,1/0 / -1等)以表明其状态会好得多。

您还可以为onCommand标志编写getter方法:

public string getFlag(){
  // some logic here
  return "green";

  // otherwise default to no flags
  return "";
}

答案 2 :(得分:0)

您可以使用System Rules library.

测试onCommand + "-green"是否已写入System.out