Java - Unit Test

Given this method in the Java class:

public void execute(String command) {

    ProcessBuilder processBuilder = new ProcessBuilder(command);
    Process process = processBuilder.start();

    int exitValue = process.waitFor();
    if (exitValue != 0) {
        throw new RuntimeException("a message here...");
    }
}

I am trying to create a suitable unit test cross platform for this method.

I am looking for a common command for all operating systems (Win, Linux, Mac and ...) or a fake command that I can pass to this method in my unit tests.

Any suggestion?

+5
source share
2 answers

This method cannot be tested with the unit test, but only with the integration test. To do a unit test, you can do a little refactoring. Introduce the new interface ProcessBuilderFactory(and the default implementation) and enter it into your class.

public interface ProcessBuilderFactory {
    ProcessBuilder createProcessBuilder(String command);
}

public class DefaultProcessBuilderFactory implements ProcessBuilderFactory {
    public ProcessBuilder createProcessBuilder(String command) {
        return new ProcessBuilder(command);
    }
}

public class ProcessExecutor {
    private ProcessBuilderFactory processBuilderFactory;
    private ProcessExecutor(ProcessBuilderFactory processBuilderFactory) {
        this.processBuilderFactory = processBuilderFactory;
    }

    public void execute(String command) {
        ProcessBuilder processBuilder = processBuilderFactory.createProcessBuilder(command);
        Process process = processBuilder.start();

        int exitValue = process.waitFor();
        if (exitValue != 0) {
            throw new RuntimeException("a message here...");
        }
    }
}

unit, ProcessBuilderFactory. , ProcessBuilderFactory, ProcessBuilder... damned, ProcessBuilder final:(

: !

, :

  • ProcessBuilder ... ProcessBuilderFactory
  • PowerMock,
+8

java unit test, java.exe exe. java.exe -version. :). jdk java.home, java.exe

, ? (jmockit, )

+2

All Articles