簡體   English   中英

Java - 單元測試

[英]Java - Unit Test

在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...");
    }
}

我正在嘗試為這種方法提出適當的跨平台單元測試。

我正在尋找所有操作系統(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...");
        }
    }
}

然后你可以通過注入一個模擬ProcessBuilderFactory來進行單元測試。 你開始編寫測試,你創建一個模擬ProcessBuilderFactory ,返回一個模擬ProcessBuilder ...該死的, ProcessBuilder也是final :(

強烈提醒:先寫測試!

所以我們有兩個選擇:

  1. 引入一個新的接口,用於使用默認實現包裝ProcessBuilder ...與創建ProcessBuilderFactory方式相同
  2. 撤消重構並查看PowerMock ,以進行最終的類模擬

由於這是java單元測試,您可以使用java.exe作為標准exe。 java.exe -version 它將永遠在那里:)。 使用java.home中的當前jdk,然后使用它來引用java.exe

查看具體要求可以使用任何模擬框架嗎? (例如jmockit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM