JUnit Rule TemporaryFolder - PullRequest
       15

JUnit Rule TemporaryFolder

13 голосов
/ 27 апреля 2010

Я создаю TemporaryFolder, используя аннотацию @Rule в JUnit 4.7. Я попытался создать новую папку, которая является дочерней для временной папки, используя tempFolder.newFolder("someFolder") в методе @Before (настройка) моего теста. Кажется, что временная папка инициализируется после запуска метода установки, то есть я не могу использовать временную папку в методе установки. Это правильное (и предсказуемое) поведение?

Ответы [ 2 ]

8 голосов
/ 05 мая 2010

Это проблема в Junit 4.7. Если вы обновите более новый Junit (например, 4.8.1), все @Rule будут запущены при вводе метода @Before: s. Связанный отчет об ошибке: https://github.com/junit-team/junit4/issues/79

6 голосов
/ 27 апреля 2010

Это тоже работает. EDIT , если в методе @Before он выглядит так, как будто myfolder.create () должен быть вызван. И это, вероятно, плохая практика, поскольку Javadoc говорит не вызывать TemporaryFolder.create (). 2nd Edit Похоже, вам нужно вызвать метод для создания временных каталогов, если вы не хотите их использовать в методах @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();
    ....
  }
}
...