13

JUnit 4.7TemporaryFolderのアノテーションを使用して作成しています。テストの (セットアップ) メソッドを使用して@Rule、一時フォルダーの子である新しいフォルダーを作成しようとしました。セットアップ メソッドの実行後に一時フォルダーが初期化されるようです。つまり、セットアップ メソッドで一時フォルダーを使用することはできません。これは正しい (そして予測可能な) 動作ですか?tempFolder.newFolder("someFolder")@Before

4

2 に答える 2

8

これは Junit 4.7 の問題です。新しい Junit (たとえば 4.8.1) をアップグレードする場合、@Before メソッドを入力すると、すべての @Rule が実行されます。関連するバグ レポートは次のとおりです: https://github.com/junit-team/junit4/issues/79

于 2010-05-05T13:25:33.250 に答える
6

これも同様に機能します。 @Beforeメソッドで myfolder.create() を呼び出す必要があるように見える場合は編集します。javadoc には TemporaryFolder.create() を呼び出さないと書かれているため、これはおそらく悪い習慣です。 2 番目の編集@Test メソッドで一時ディレクトリを作成したくない場合は、メソッドを呼び出して一時ディレクトリを作成する必要があるようです。また、一時ディレクトリで開いているファイルを閉じていることを確認してください。そうしないと、自動的に削除されません。

<imports excluded>

public class MyTest {

  @Rule
  public TemporaryFolder myfolder = new TemporaryFolder();

  private File otherFolder;
  private File normalFolder;
  private File file;

  public void createDirs() throws Exception {
    File tempFolder = myfolder.newFolder("folder");
    File normalFolder = new File(tempFolder, "normal");
    normalFolder.mkdir();
    File file = new File(normalFolder, "file.txt");

    PrintWriter out = new PrintWriter(file);
    out.println("hello world");
    out.flush();
    out.close();
  }

  @Test
  public void testSomething() {
    createDirs();
    ....
  }
}
于 2010-04-27T16:39:07.850 に答える