Подтвердить что ты не робот

Как сравнить файлы в тестовом примере JUnit?

Я хочу реализовать JUnit в небольшом проекте, над которым я работаю, потому что хочу немного узнать об этом.

Учебники, которые я прочитал, ссылаются на методы, которые имеют определенный вывод.

В моем случае мой вывод - это файлы, как я могу это сделать? любой простой пример? любой подход, который мог бы помочь мне в этом?

Файлы представляют собой сырые текстовые файлы, которые создаются с помощью частного метода void.

4b9b3361

Ответ 1

Вы хотите получить правильный выходной файл для заданного набора входов и настроить тест для вызова своего метода void с этими входами, а затем сравнить ваш проверенный выходной файл с данными, полученными вашим методом. Вы должны убедиться, что у вас есть способ указать, куда будет выводиться ваш метод, иначе ваш тест будет очень хрупким.

@Rule
public TemporaryFolder folder = new TemporaryFolder();

@Test
public void testXYZ() {
    final File expected = new File("xyz.txt");
    final File output = folder.newFile("xyz.txt");
    TestClass.xyz(output);
    Assert.assertEquals(FileUtils.readLines(expected), FileUtils.readLines(output));
}

Использует commons-io FileUtils для сравнения текстовых файлов для удобства и JUnit TemporaryFolder, чтобы гарантировать, что выходной файл никогда не существует до запуска теста.

Ответ 3

После того, как ваши методы напишут файл, в модульном тесте вы можете прочитать файл и проверить, написано ли оно правильно.

Еще одна вещь, которая имеет смысл, состоит в том, чтобы ваши методы разделились на один, который извлекает эти данные и возвращает их методам, которые просто записывают его в файл. Затем вы можете проверить, хороши ли данные, возвращенные первым методом.

И еще один вероятный подход состоял бы в том, чтобы передать OutputStream методу, который записывает данные. В "реальном коде" вы можете передать FileOutputStream/FileWriter, тогда как в тестовом коде вы можете написать макетную реализацию OutputStream и проверить, что на ней написано.

Ответ 4

Если вы не можете управлять методом для размещения вывода в потоке, я бы сказал, что вам нужно реорганизовать свой код, чтобы метод получал поток в параметре (или в конструкторе его класса).

После этого тестирование довольно просто - вы можете просто проверить поток. Легко проверяемый код обычно равен хорошему коду.

Ответ 5

Хотя ваш вопрос может показаться упрощенным, он действительно врезается в сердце модульного тестирования, нужно написать хорошо сформированный код, который можно проверить. Вот почему некоторые эксперты советуют сначала написать unit test, а затем класс реализации.

В вашем случае я предлагаю вам позволить вашему методу выполнить и создать ожидаемый файл (ы), после чего ваши unit test могут анализировать, что файлы сформированы правильно.