использование AssertJ для сравнения 2 CSV в Java

У меня есть этот метод на Java, где я пытаюсь сравнить 2 файла csv с помощью assertJ, и этот метод выглядит следующим образом. Я использую поля игнорирования с функцией Regex, как показано ниже. Регулярное выражение предназначено для игнорирования значений для coulmns, в которых есть временная метка. Я вижу, что эти столбцы все еще сравниваются, и утверждение не выполняется. Может ли кто-нибудь сообщить мне, что я здесь делаю не так?

public class RCSV {

public static void main(String[] args) throws IOException, CsvException {
    // TODO Auto-generated method stub
    
    try {
    CSVReader reader1 = new CSVReader(new FileReader("file1.csv"));
        List<String[]> Entries1 = reader1.readAll();
        System.out.println(Entries1);
    CSVReader reader2 = new CSVReader(new FileReader("file2.csv"));
        List<String[]> Entries2 = reader2.readAll();
        
        assertThat(Entries1).usingRecursiveComparison().ignoringFieldsMatchingRegexes("[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]")
        .isEqualTo(Entries2);
    } catch (AssertionError e) {
        e.printStackTrace();
    }
     
}

}

Это ошибка, которую я вижу в консоли: java.lang.AssertionError: при рекурсивном сравнении поля за полем, но обнаружил следующую разницу:

Фактические и ожидаемые объекты верхнего уровня различаются:

  • фактическое значение: 2020-11-04 13:31:51
  • ожидаемое значение: 2020-11-05 13:31:52

person YRKKH    schedule 06.11.2020    source источник


Ответы (1)


_ 1_ игнорирует поля, имя которых соответствует регулярному выражению, и не оценивается по значению полей.

Я думаю, что лучшим подходом было бы отфильтровать метку времени из того, что читает CSVReader, если это возможно, и использовать простое утверждение списка, например: assertThat(entries1).isEqualTo(entries2)

Если вы не можете этого сделать, попробуйте определить компаратор элементов для String[], который бы игнорировал элементы с индексами, соответствующими метке времени, а затем используйте это утверждение:

assertThat(entries1).usingElementComparator​(comparatorIgnoringTimestamp) 
                    .isEqualTo(entries2)
person Joel Costigliola    schedule 07.11.2020