在java for a junit测试中,我试图模拟一个函数,该函数从另一个外部api的端点下载zip文件。为了模拟下载,我需要压缩一个测试文件并将其转换为字节以用作mock的返回值。我不需要将压缩文件写回文件系统,而是使用原始字节。
mock(zipReturner.getZipBytes()).thenReturn(testFileAsZippedBytes("testFile.txt"))
private Optional<byte[]> testFileAsZippedBytes(String testFile) {
???
}
1条答案
按热度按时间lhcgjxsq1#
分享我的答案,因为我发现的所有其他示例都要重得多,需要更多的代码行在字节上循环,或者需要使用外部库来做同样的事情。
要在没有上述内容的情况下执行此操作,请使用bytearrayoutputstream的组合,因为它具有
toByteArray
函数,zipoutputstream将压缩字节写入bytearrayoutputstream和fileinputstream,从文件系统读取测试文件。使用
ZipEntry
将文件作为条目添加到ZipOutputStream
并将字节写入zip。使用zipOutputStream.finish()
以确保所有内容都已写入流并准备好在流中使用ByteArrayOutputStream
,否则,根据我的经验,您只能在调用时获取部分数据byteArrayOutputStream.toByteArray()
.