junit Java:在单元测试中模拟multipartfile

fd3cxomn  于 5个月前  发布在  Java
关注(0)|答案(3)|浏览(111)

我试图模拟一个MultipartFile,我想用我在测试中创建的流来创建模拟
我也试过用一个文件,但运气不好。

FileInputStream stream = new 
FileInputStream("MOCK_file.xlsm");
MultipartFile f1 = new MockMultipartFile("file1",stream);
MultipartFile[] files = {f1};
return files;

字符串
我得到一个fileNotFoundException。我应该把我的文件放在我的Maven项目中的什么地方,这样单元测试就可以找到这个文件了?
--或者--
如何在代码中创建流而不使用文件?

z6psavjg

z6psavjg1#

更好的是,您可以只模拟MultipartFile,并且根本不需要InputStream
为此,您只需要执行mock(MultiPartFile.class),然后定义每个函数将执行的操作
例如,如果您使用名称

final MultipartFile mockFile = mock(MultipartFile.class);
when(mockFile.getOriginalFilename()).thenReturn("CoolName");

字符串
这样,您就不必为实际文件和意外响应而烦恼,因为您将定义它们

cqoc49vn

cqoc49vn2#

如何在代码中创建流而不使用文件?
您可以使用ByteArrayInputStream注入模拟数据。对于少量数据来说,这非常简单:

byte[] data = new byte[] {1, 2, 3, 4};
InputStream stream = new ByteArrayInputStream(data);

字符串
否则,你需要弄清楚你的代码是从哪个目录运行的,这取决于它是如何运行的。为了帮助你,你可以打印user.dir系统属性,它告诉你当前的目录:

System.out.println(System.getProperty("user.dir"));


或者,您可以使用完整路径而不是相对路径来查找文件。

uoifb46i

uoifb46i3#

把文件放进去

src/test/resources/MOCK_file.xlsm

字符串
从JUnit类中读取:

InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("MOCK_file.xlsm");

相关问题