Ответ 1
Это проблема в Junit 4.7. Если вы обновите новый Junit (например, 4.8.1), все @Rule будут запущены при вводе метода @Before: s. Связанный отчет об ошибке выглядит следующим образом: https://github.com/junit-team/junit4/issues/79
Я создаю TemporaryFolder
с помощью аннотации @Rule
в JUnit 4.7. Я попытался создать новую папку, являющуюся дочерним элементом временной папки, используя tempFolder.newFolder("someFolder")
в методе @Before
(setup) моего теста. Кажется, что временная папка инициализируется после запуска метода установки, то есть я не могу использовать временную папку в методе настройки. Это правильное (и предсказуемое) поведение?
Это проблема в Junit 4.7. Если вы обновите новый Junit (например, 4.8.1), все @Rule будут запущены при вводе метода @Before: s. Связанный отчет об ошибке выглядит следующим образом: https://github.com/junit-team/junit4/issues/79
Это тоже работает. РЕДАКТИРОВАТЬ, если в методе @Before он похож на вызов myfolder.create(). И это, вероятно, плохая практика, так как javadoc говорит, что нельзя называть TemporaryFolder.create(). 2nd Edit Похоже, вам нужно вызвать метод для создания временных каталогов, если вы не хотите их в методах @Test. Также убедитесь, что вы закрываете все файлы, которые вы открываете в каталоге temp, или они не будут автоматически удалены.
<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();
....
}
}