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

xbp102n0  于 2023-04-19  发布在  Java
关注(0)|答案(3)|浏览(192)

我知道有几个关于空方法单元测试的问题,但我的问题是不同的。
我正在学习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();
}

由于intern的问题,我不能在Runtime任务中执行该命令。所以在这个方法中只有一个System.out
我有多个这样的方法,所以对这个方法的测试将覆盖整个代码的10%以上。
测试这种方法有用吗?如果有用,如何测试?

sgtfey8w

sgtfey8w1#

如果有很多这样的方法,你可能想在这里测试的是updateScreen()使用正确的字符串“some-command-绿色”,并且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");
}
liwlm1x9

liwlm1x92#

如果方法成功运行,则返回true,否则返回false。
您还可以测试此方法的输出,如下所述:Should we unit test console outputs?
但根据我的经验,让方法返回一个乐观或悲观的值(true/false,1/0/-1等)来指示它们的状态要好得多。
你也可以为onCommand标志写一个getter方法:

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

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

lmyy7pcs3#

您可以使用系统规则库测试onCommand + "-green"是否已写入System.out

相关问题