我知道有一些关于无效方法单元测试的问题,但我的问题是不同的 我正在学习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%以上。
测试这样的方法有用吗?是的,怎么样?
答案 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)