我有一个java程序,它在End-of-Day的时候对我们的环境进行清理,因此,我在一个名为UnixUtil.java的Util类中写了一个方法,在我们的linux服务器上执行正在运行的进程,并在其中运行Junit测试用例。因此,我在一个名为UnixUtil.java的Util类中写了一个方法,在我们的linux服务器上执行正在运行的进程,如果成功则返回一个String对象,如果无法执行命令则返回一个null对象。
ProcessBuilder processBuilderSearch = new ProcessBuilder();
String command = "ps -ef|grep -i engservice|grep -v grep|wc -l"
try {
Process searchProcess = processBuilderSearch.start();
StringBuilder sb = new StringBuilder();
BufferedReader searchCommanndReader = new BufferedReader(new InputStreamReader(searchProcess.getInputStream()));
String lineSearch;
while((lineSearch=searchCommandReader.readLine())!=null) {
sb.append(lineSearch);
}
return sb.toString();
} catch(Exception e) {
LOGGER.error("Exception occurred: [{}]", ExceptionUtils.getStackTrace(e));
}
return null;
我只是想知道如何才能写出Java测试覆盖率自动化的测试用例来测试这种linux命令。有什么方法吗?
你当然不会对linux命令进行单元测试,但是你可以测试linux命令是否被调用。你可以通过嘲弄ProcessBuilder类来实现(也可以把它作为方法的参数,这样你就可以通过嘲弄来代替)。然后调用Mockito的verify方法来确保processBuilderSearch.start()被执行过一次,并且searchProcess.getInputStream()也被执行过一次。模板。
verify(mockObject, times(3))