簡體   English   中英

如何擺脫 Junit5 中的 TemporaryFolder 規則

[英]How to get rid of TemporaryFolder rule in Junit5

我正在將單元測試從 Junit4 遷移到 Junit5。 在測試中,我使用來自 Junit4 API 的TemporaryFolder 規則 為了保持測試正常工作,我添加了@EnableRuleMigrationSupport注釋:

@EnableRuleMigrationSupport
public final class SomeTest {

    @Rule
    public final TemporaryFolder tmp = new TemporaryFolder();

   // tests ...
}

據我了解,在 Junit5 中我需要使用extensions而不是rules ,但在 Junit5 擴展中我找不到任何替代TemporaryFolder的東西。 它存在嗎? 如何正確用擴展名替換TemporaryFolder規則?

您可以使用JUnit 5 用戶指南的 §2.20.1 中描述的@TempDir注釋 (JUnit 5.4+)。 從用戶指南(強調我的):

內置的TempDirectory擴展用於為單個測試或測試類中的所有測試創建和清理臨時目錄。 默認情況下已注冊。 要使用它,請使用@TempDir注釋java.nio.file.Pathjava.io.File類型的非私有字段,或添加使用@TempDir注釋的java.nio.file.Pathjava.io.File類型的參數@TempDir到生命周期方法或測試方法。

注意:此擴展是在5.4版中添加的,目前(從5.8.2開始)是實驗性的。

使用實例字段的示例:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File

class SomeTests {

    @TempDir
    Path directory; // may be private since 5.8

}

允許 @TempDir 字段為私有 #2687

使用測試方法參數的示例:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File

class SomeTests {

    @Test
    void testFoo(@TempDir Path directory) {
        // do test...
    }

}

注意:不支持構造函數參數。

@TempDir的 Javadoc 中描述了創建和刪除目錄的時間(來自 JUnit 5.8.2 的文檔引用):

創建

僅當測試類中的字段或生命周期方法或測試方法中的參數使用@TempDir注釋時,才會創建臨時目錄。 如果字段類型或參數類型既不是Path也不是File ,或者如果無法創建臨時目錄,則會酌情拋出ExtensionConfigurationExceptionParameterResolutionException 此外,對於使用@TempDir注釋的構造函數參數,將引發ParameterResolutionException

范圍

默認情況下,為@TempDir注釋的每個聲明創建一個單獨的臨時目錄。 如果要在測試類中的所有測試之間共享臨時目錄,則應在static字段或@BeforeAll方法的參數上聲明注釋。

舊行為

您可以通過將junit.jupiter.tempdir.scope配置參數設置為per_context來恢復使用單個臨時目錄的舊行為。 在這種情況下,臨時目錄的范圍取決於在執行測試類時遇到第一個@TempDir注釋的位置。 當注釋出現在static字段或@BeforeAll方法的參數上時,臨時目錄將由類中的所有測試共享。 否則——例如,當@TempDir僅用於實例字段或 test、 @BeforeEach@AfterEach方法中的參數時——每個測試將使用自己的臨時目錄。

刪除

當到達臨時目錄范圍的末尾時,即當測試方法或類完成執行時,JUnit 將嘗試遞歸刪除臨時目錄中的所有文件和目錄,最后是臨時目錄本身。 如果刪除文件或目錄失敗,將拋出IOException導致測試或測試類失敗。

暫無
暫無

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

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