Java:在单元测试中模拟multipartfile

时间:2019-10-02 18:47:49

标签: java junit stream

我正在尝试模拟MultipartFile,并且希望使用在测试中创建的流来创建模拟

我也尝试过一个运气不佳的文件。到目前为止,这是我尝试过的

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

我得到了fileNotFoundException。我应该将文件放在Maven项目中的什么位置,以便单元测试可以找到该文件?

-或-

如何不使用文件就直接在代码中创建流?

3 个答案:

答案 0 :(得分:0)

  

如何不使用文件就直接在代码中创建流?

您可以使用ByteArrayInputStream来注入模拟数据。少量数据非常简单:

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

否则,您需要弄清楚代码从哪个目录运行,这取决于它的运行方式。为此,您可以打印user.dir系统属性,该属性会告诉您当前目录:

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

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

答案 1 :(得分:0)

将文件放入

src/test/resources/MOCK_file.xlsm

从JUnit类中读取:

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

答案 2 :(得分:0)

更好的是,您只能模拟extension ClosedRange where Bound : Comparable, Bound : ExpressibleByIntegerLiteral { static func safe(_ lhs: Bound, _ rhs: Bound) -> ClosedRange<Bound>? { guard lhs >= 0, rhs >= lhs else { return nil } return lhs ... rhs } } ,而根本不需要MultipartFile

为此,您只需要执行InputStream,然后定义每个函数将要执行的操作

例如,如果您使用名称

mock(MultiPartFile.class)

这样,您将不必担心实际文件,也不必担心意外的响应,因为它们将被定义

相关问题