gpt4 book ai didi

java - 单元测试 : comparing file generation assertion returns false

转载 作者:行者123 更新时间:2023-11-29 04:18:28 24 4
gpt4 key购买 nike

我尝试编写我的单元测试来测试我的 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));

但我仍然得到 assertion = false,实际上我得到了这个错误:

java.lang.AssertionError: null at org.junit.Assert.fail(Assert.java:86) at org.junit.Assert.assertTrue(Assert.java:41) at org.junit.Assert.assertTrue(Assert.java:52) at 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 字节数组,而是使用 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)));

关于java - 单元测试 : comparing file generation assertion returns false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50735608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com