mhs*_*ams 5 java junit unit-testing
在Java类中给出此方法:
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...");
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试为这种方法提出适当的跨平台单元测试.
我正在寻找所有操作系统(Win,Linux,Mac和...)的常用命令,或者我可以在单元测试中传递给此方法的假命令.
有什么建议吗?
此方法无法通过单元测试进行测试,只能通过集成测试进行测试.要进行单元测试,你可以做一个小型的重构.引入一个新接口ProcessBuilderFactory(和一个默认实现)并将其注入您的类.
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...");
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以通过注入模拟进行单元测试ProcessBuilderFactory.你开始写测试,你创建一个模拟ProcessBuilderFactory,并返回一个模拟ProcessBuilder...该死的,ProcessBuilder是final太:(
强烈提醒:先写测试!
所以我们有两个选择:
ProcessBuilder默认实现...就像我们创建的一样ProcessBuilderFactory| 归档时间: |
|
| 查看次数: |
2634 次 |
| 最近记录: |