Как избежать проблем со статическим методом в @BeforeClass

#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. Если при этом вы получите ошибку, пожалуйста, опубликуйте трассировку исключений.