私はJunit5にJunit4から単体テストを移行しています。テストでは私が使用しているTemporaryFolder
ルール Junit4のAPIからを。I追加作業テストを維持するには@EnableRuleMigrationSupport
、注釈を:
@EnableRuleMigrationSupport
public final class SomeTest {
@Rule
public final TemporaryFolder tmp = new TemporaryFolder();
// tests ...
}
私は理解しているように、Junit5 Iニーズに使用する拡張子の代わりのルールを、私はのための任意の代替を見つけることができませんTemporaryFolder
Junit5拡張でを。それは存在していますか?どのように正しく置き換えるためTemporaryFolder
の拡張子を持つルールを?
あなたは使用することができる@TempDir
で説明したアノテーション(JUnitの5.4+)、JUnitの5ユーザーガイドの§2.20.1を。ユーザーガイド(から重点鉱山):
内蔵の
TempDirectory
拡張は、個々のテストまたはテストクラス内のすべてのテストのための一時ディレクトリを作成して、クリーンアップするために使用されます。これは、デフォルトで登録されています。これを使用するには、タイプの非プライベートフィールド注釈を付けjava.nio.file.Path
たりjava.io.File
とし@TempDir
たり型のパラメータを追加java.nio.file.Path
またはjava.io.File
で注釈を付け@TempDir
、ライフサイクルメソッドや試験方法にします。
注:この拡張バージョンで追加された5.4
と(のように現在5.5.1
の実験)。
インスタンスフィールドの使用例:
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; // must be non-private
}
試験方法のパラメータの使用例:
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...
}
}
注意:コンストラクタのパラメータがサポートされていません。
ディレクトリが作成され、削除された場合に記述されているのJavadocを@TempDir
:
一時ディレクトリの作成
ライフサイクル方法やテスト方法でテストクラス内のフィールドまたはパラメータがで注釈されている場合、一時ディレクトリにのみ作成されます
@TempDir
。フィールドタイプまたはパラメータタイプはどちらもされていない場合Path
もFile
または一時的なディレクトリを作成することができない場合、ExtensionConfigurationException
またはParameterResolutionException
適切にスローされます。また、ParameterResolutionException
との注釈付きコンストラクタパラメータにスローされます@TempDir
。一時ディレクトリスコープ
一時ディレクトリのスコープは、最初の場所に依存する
@TempDir
テストクラスを実行する際に、注釈が検出されました。注釈が上に存在するとき、一時ディレクトリには、クラス内のすべてのテストで共有されるstatic
フィールドまたはパラメータの@BeforeAll
方法。それ以外の場合-たとえば、ときに@TempDir
のみ、インスタンスフィールド上またはテスト中のパラメータに使用されている@BeforeEach
、または@AfterEach
方法-各テストは独自の一時ディレクトリを使用します。一時ディレクトリの削除
一時ディレクトリのスコープの終わりに達したときにテストメソッドまたはクラスが完成し、実行しているとき、すなわち、JUnitは、最終的には、一時ディレクトリ自体を再帰的に一時ディレクトリ内のすべてのファイルとディレクトリを削除しようとします。ファイルまたはディレクトリが失敗した場合の削除には、
IOException
それがテストまたはテストクラスが失敗する原因になりますスローされます。