#java #junit
#Ява #джунит
Вопрос:
У меня есть тестовый класс JUnit, в котором я создаю TemporaryFolder
и тестирую свою программу в этом каталоге с помощью вновь созданных файлов и папок. В настоящее время на мероприятии все настроено @Before
:
@Rule public TemporaryFolder folder = new TemporaryFolder(); File testFile1; File testFile2; public Listlt;Stringgt; folderItems = new ArrayListlt;gt;(); @Before public void initalise() throws IOException { testFile1 = folder.newFile("test1.txt"); testFile2 = folder.newFile("test2.txt"); folderItems.add(testFile1.getName()); folderItems.add(testFile2.getName()); Directory.setCurrentDirectory(folder.getRoot().getAbsolutePath()); }
Однако я читал, что @Before
это выполняется перед каждым тестом, и поскольку все мои тесты будут использовать одну и ту же структуру папок, лучше использовать @BeforeClass
ту, которая выполняется только один раз. Здесь, однако, у меня есть проблема с тем фактом, что метод должен быть статичным. Это приводит к ошибке, потому что тогда все переменные должны были бы быть статическими. Однако список не может быть статичным, так как я добавляю в testFiles
него имя во время инициализации. Есть идеи, как это решить?
РЕДАКТИРОВАТЬ Я изменил файл на этот:
@ClassRule public static TemporaryFolder folder = new TemporaryFolder(); public static File testFile1; public static File testFile2; public static Listlt;Stringgt; folderItems; @BeforeClass public static void setUpFolder() { try { testFile1 = folder.newFile("test1.txt"); } catch (IOException e) { return; } try { testFile2 = folder.newFile("test2.txt"); } catch (IOException e) { return; } folderItems.add(testFile1.getName()); folderItems.add(testFile2.getName()); Directory.setCurrentDirectory(folder.getRoot().getAbsolutePath()); }
Несмотря на то, что это не приводит к каким-либо ошибкам, мой тест на самом деле не выполняется и не проходит, я получаю и initializationError
Комментарии:
1. Очевидно, что вам нужно сделать поля статичными (и использовать
@ClassRule
), если вы хотите, чтобы они применялись ко всем тестам.2. @MarkRotteveel спасибо за ваш комментарий, пожалуйста, ознакомьтесь с правкой
3. Если при этом вы получите ошибку, пожалуйста, опубликуйте трассировку исключений.