модульный тест: сравнение утверждения генерации файла возвращает false - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь написать свой модульный тест для проверки генерации моего файла xlsx.Я сохраняю действительный файл в тестовых ресурсах, затем пытаюсь сгенерировать тот же файл и сравнить их.

InputStream xlsxContent = xlsxContentWriter.generateXlsx(getSamples(10), RawEventDto.class);
InputStream file = new ByteArrayInputStream(Files.readAllBytes(Paths.get(ClassLoader.getSystemResource("test.xlsx").toURI())));
Assert.assertEquals(IOUtils.toByteArray(file), IOUtils.toByteArray(xlsxContent));

Проблема: утверждение возвращает false.

Чтобы убедиться, что сгенерированный файл являетсяТак же, как файл в ресурсах, я сохранил сам сгенерированный файл в ресурсах, так что он, очевидно, тот же:

InputStream xlsxContent = xlsxContentWriter.generateXlsx(getSamples(10), RawEventDto.class);           
File targetFile = new File("/home/user/test.xlsx");
OutputStream outStream = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
int bytesRead;
while((bytesRead = xlsxContent.read(buffer)) !=-1){
      outStream.write(buffer, 0, bytesRead);
}
xlsxContent.close();
outStream.flush();
outStream.close();

Есть идеи, почему это возвращает false?Любой трюк, чтобы узнать о файле?

Редактировать:

Вот мой код сейчас:

           InputStream file = new ByteArrayInputStream(Files.readAllBytes(Paths.get(ClassLoader.getSystemResource("test.xlsx").toURI())));
        byte[] byteArray1 = IOUtils.toByteArray(file);
        byte[] byteArray2 = IOUtils.toByteArray(xlsxContent);


        Assert.assertEquals(IOUtils.toByteArray(file).length, IOUtils.toByteArray(xlsxContent).length);
        Assert.assertTrue(Arrays.equals(byteArray1,byteArray2));

Но я все еще получаю утверждение = ложь, на самом делеЯ получаю эту ошибку:

java.lang.AssertionError: null at org.junit.Assert.fail (Assert.java:86) в org.junit.Assert.assertTrue (Assert.java: 41) в org.junit.Assert.assertTrue (Assert.java:52) в com.renault.hsmt.util.test.XlsxContentWriterTest.testXlsxWrite (XlsxContentWriterTest.java:61)

Фактически,даже этот код возвращает false (я сравниваю сгенерированный файл с самим собой, не беря его из папки ресурсов):

InputStream xlsxContent = xlsxContentWriter.generateXlsx(getSamples(10), RawEventDto.class);
            byte[] byteArray1 = IOUtils.toByteArray(xlsxContent);
            byte[] byteArray2 = IOUtils.toByteArray(xlsxContent);


            Assert.assertEquals(IOUtils.toByteArray(xlsxContent).length, IOUtils.toByteArray(xlsxContent).length);
            Assert.assertTrue(Arrays.equals(byteArray1,byteArray2));

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Если вы используете JUnit 5, вы можете просто позвонить

Assertions.assertArrayEquals(array1,array2);

Документация JUnit5 Assertions

0 голосов
/ 07 июня 2018

Вы не будете сравнивать 2-байтовые массивы, подобные этому, используйте вместо этого Arrays.equals, например:

public static void main(String[] args) {
    byte[] a = {0,1};
    byte[] b = {0,1};
    System.out.println(a.equals(b)); //false
    System.out.println(Arrays.equals(a, b)); //true
}

, в вашем случае это будет:

  Assert.assertTrue(Arrays.equals(IOUtils.toByteArray(file), IOUtils.toByteArray(xlsxContent)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...