簡體   English   中英

在 Java 中使用 @Mock 進行單元測試

[英]Using @Mock in Java for Unit Tests

您好,我是單元測試的新手,想測試 class 中的一種方法,該方法將通過 API 將文檔生成到外部文件夾。但是,由於這只是一個測試,我不希望文檔實際顯示在每次我測試的外部文件夾。 我只是想看看文檔的創建方式是否正確。 如果我使用@Mock 並以這種方式引入 class,這將阻止文檔顯示在文件夾中,或者是否有另一種方式 go 關於它。 我正在使用 Java 和 Mockito。

使解決方案可測試。 通常,這可以通過使代碼參數化或使用依賴注入來完成。

通過使代碼參數化,我的意思是我們傳遞了應該創建文檔的位置或文件夾。 如果您使用 Junit 5.4 或更高版本,您可以添加@TempDir注釋為您的測試創建一個臨時文件夾。 您可以將此臨時文件夾傳遞給您的代碼。 (此外,如果您想使用確切的文件位置,您可以修改它。例如: Path documentFile = location.resolve("document.txt"); ):

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path;

class DocumentGeneratorTest {

    @TempDir
    private Path location;

    @Test
    void generatedDocumentShouldBeCorrect() {
        DocumentGenerator generator = new DocumentGenerator();

        generator.createDocument(location);

        // your assertion(s) on location
    }
}

如果由於某種原因你不能或不想提供位置作為參數,你也可以使用依賴注入。 通過將 IO 相關操作從文檔生成器抽象到接口,您可以在測試期間使用模擬實現(您自己的模擬或庫,例如Mockito )。 使用模擬后,您可以斷言作為參數傳遞給模擬以保存的文檔。

暫無
暫無

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

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