Java 程序具有 Linux 方法 - 我可以在其上运行 Junit 测试用例吗?

标签 java linux junit automated-tests

我有一个 java 程序,可以在一天结束时清理我们的环境。因此,我在名为 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))

关于Java 程序具有 Linux 方法 - 我可以在其上运行 Junit 测试用例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61865644/

相关文章:

linux - 如何在 shell 脚本中比较两个浮点值

java - 如何从 JUnit 测试中判断 Eclipse 项目是否打开?

java - Powermock 和 Jmockit 是否有替代方法来模拟静态和私有(private)方法?

java - 测试apache poi生成excel内容

java - 如何在多线程环境下实现FIFO队列

java - Android开发-内部类中的变量

linux - 如果两个进程在没有锁的情况下访问同一个文件会发生什么?

linux - 对 `fstat` 、 `lstat` 或 `stat` 的并行调用是否受到 linux 上打开文件限制的限制?

java - 如何使用 Springfox 在 swagger2 中添加自定义注释?

java - 结束行字符在 Java 正则表达式中不起作用