18

JUnit の TemporaryFolder ルールのドキュメントには、次のようなファイルとフォルダーが作成されると記載されています。

「テストメソッドが終了すると(合格または不合格にかかわらず)削除されることが保証されています」

ただし、TemporaryFolder が存在しないというアサートは失敗します。

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;

public class MyTest {

    @Rule
    public TemporaryFolder _tempFolder = new TemporaryFolder();

    @After
    public void after() {
        assertFalse(_tempFolder.getRoot().exists());  //this assertion fails!
    }

    @Test
    public void pass() throws IOException {
        assertTrue(true);
    }

また、ファイルが実際にファイル システムに存在することもわかります。

これが削除されないのはなぜですか?

4

2 に答える 2

12

これは、JUnit が一時フォルダーを削除する前に after() を呼び出すためです。@AfterClass メソッドで一時フォルダーを確認すると、削除されていることがわかります。このテストはそれを証明します

public class MyTest {
   static TemporaryFolder _tempFolder2;

    @Rule
    public TemporaryFolder _tempFolder = new TemporaryFolder();

    @After
    public void after() {
        _tempFolder2 = _tempFolder;
        System.out.println(_tempFolder2.getRoot().exists());
    }

    @AfterClass
    public static void afterClass() {
        System.out.println(_tempFolder2.getRoot().exists());
    }

    @Test
    public void pass() {
    }
}

出力

true
false
于 2013-05-11T06:36:54.667 に答える