Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单元测试:比较文件生成断言返回false_Java_Unit Testing - Fatal编程技术网

Java 单元测试:比较文件生成断言返回false

Java 单元测试:比较文件生成断言返回false,java,unit-testing,Java,Unit Testing,我尝试编写单元测试来测试xlsx文件的生成。 我在测试资源中存储了一个有效的文件,然后尝试生成相同的文件并进行比较 InputStream xlsxContent = xlsxContentWriter.generateXlsx(getSamples(10), RawEventDto.class); InputStream file = new ByteArrayInputStream(Files.readAllBytes(Paths.get(ClassLoader.getSystemResou

我尝试编写单元测试来测试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();
你知道为什么这个结果是假的吗?关于这个文件有什么窍门吗

编辑:

下面是我的代码:

           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位于 org.junit.Assert.fail(Assert.java:86)位于 Assert.assertTrue(Assert.java:41)位于 Assert.assertTrue(Assert.java:52)位于 com.renault.hsmt.util.test.XlsxContentWriterTest.testXlsxWrite(XlsxContentWriterTest.java:61)

实际上,即使这段代码也返回false(我将生成的文件与自身进行比较,而不从resources文件夹中获取):


您不会像这样比较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)));

如果您使用的是JUnit5,那么只需调用

Assertions.assertArrayEquals(array1,array2);

Thx关于你的答案,我已经编辑了我的帖子,我尝试了你的解决方案,但仍然得到错误的断言在比较数组之前,你能用另一个断言进行测试吗?数组将比较长度?Assert.assertEquals(IOUtils.toByteArray(file.length),IOUtils.toByteArray(xlsxContent.length);仍然没有(我再次更新了我的帖子),仍然收到空错误似乎长度比较是可以的,但内容比较不是,这一个引发空错误另一个,逐字节比较,如果不相同,它将抛出断言错误,在数组中的确切位置:public static void comparararrays(byte[]a,byte[]b){Assert.assertEquals(a.length,b.length);for(int i=0;iAssertions.assertArrayEquals(array1,array2);