我正在尝试模拟MultipartFile,并且希望使用在测试中创建的流来创建模拟
我也尝试过一个运气不佳的文件。到目前为止,这是我尝试过的
FileInputStream stream = new
FileInputStream("MOCK_file.xlsm");
MultipartFile f1 = new MockMultipartFile("file1",stream);
MultipartFile[] files = {f1};
return files;
我得到了fileNotFoundException。我应该将文件放在Maven项目中的什么位置,以便单元测试可以找到该文件?
-或-
如何不使用文件就直接在代码中创建流?
答案 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)
这样,您将不必担心实际文件,也不必担心意外的响应,因为它们将被定义