Запись содержимого во временную папку и удаление файла после теста

#java #junit #temporary-files

#java #junit #временные файлы

Вопрос:

Я пытаюсь записать несколько строк в файл, созданный TemporaryFolder. Мне нужно предоставить 3 строки: Line1 a
Line2 b c
Line 3

1) Я делаю это, но это ничего не добавляет. Длина по testedContent -прежнему равна 0. Что я делаю не так? :

 private ContentFileRetriever contentFileRetriever = new ContentFileRetrieverService();

    @Rule
    public TemporaryFolder tempFolder = new TemporaryFolder();

    @Before
    public void setup() {
    }

    @Test
    public void getContentFile() throws IOException {
        File textFile = tempFolder.newFile("testText.txt");
        String pathFile = textFile.getPath();
        FileWriter fileWriter = new FileWriter(textFile.getName());
        fileWriter.write("Line1 a");
        fileWriter.write("Line2 b c");
        fileWriter.write("Line3 3");
        String[] testedContent = contentFileRetriever.getContentFile(pathFile);
        String[] expected = {"Line1 a", "Line2 b c", "Line 3"};
        assertArrayEquals(expected, testedContent);
    }
 

2) Должен ли я делать это в setup с @Before помощью метода или делать это внутри test?

3) Я прочитал, что эта папка будет удалена автоматически, поэтому мне не нужно выполнять .deleteOnExit() textFile ?

Комментарии:

1. Попробуйте очистить средство записи и закрыть его, используя OutputStreamWriter#flush и OutputStreamWriter#close методы OutputStreamWriter

2. @ValentinCarnu добавлено fileWriter.flush(); до и после fileWriter.write("Line1 a"); , но по-прежнему 0 длины.

3. Попробуйте создать свой FileWriter объект с вашим File объектом в качестве параметра конструктора, а затем очистить и закрыть его перед чтением из файла.`.

4. второе, что я бы попробовал, это вызвать contentFileRetriever.getContentFile метод с textFile.getAbsolutePath() параметром as вместо textFile.getPath()

5. Я сделал: pastebin.com/jHGCTLTF и testedContent.length = 1 я пытался сбрасывать данные для каждой записи в файл, но ничего не произошло.

Ответ №1:

Я вижу две проблемы:

  1. Вы открываете свой объект FileWriter с именем файла вместо самого файла
  2. Вы не закрываете свой FileWriter

Это работает для меня:

   @Test
  public void getContentFile() throws IOException {
    File textFile = tempFolder.newFile("testText.txt");
    FileWriter fileWriter = new FileWriter(textFile);
    fileWriter.write("Line1 a");
    fileWriter.write("Line2 b c");
    fileWriter.write("Line3 3");
    fileWriter.close();
  }