如何在MuleSoft MUnit测试中模拟文件下载?
MUnit模拟ZIP下载REST API的正确方法
你遇到的问题是因为readURL()在Mock场景下对本地文件路径的解析逻辑不符合预期,正确的做法是直接读取ZIP文件的二进制内容作为Mock响应,而非依赖readURL的路径处理。
以下是具体的MUnit配置示例:
<munit:mock-when processor="rest:request" doc:name="Mock ZIP download API"> <munit:with-attributes> <munit:with-attribute name="method" whereValue="#['GET']"/> <munit:with-attribute name="path" whereValue="#['/api/download/zip']"/> </munit:with-attributes> <munit:then-return> <!-- 从测试资源目录读取ZIP文件并转为字节数组 --> <set-payload value="#[getResourceAsStream('test-files/sample-test.zip').readAllBytes()]" doc:name="Set ZIP payload"/> <!-- 设置正确的Content-Type响应头 --> <set-header headerName="Content-Type" value="application/zip" doc:name="Set ZIP content type"/> </munit:then-return> </munit:mock-when>
关键说明:
- 使用
getResourceAsStream()读取项目测试资源目录(如src/test/resources/test-files/)下的ZIP文件,避免了本地路径的解析问题 - 将文件流转换为字节数组,确保响应是正确的二进制ZIP内容
- 必须设置
Content-Type为application/zip,保证调用方能正确识别响应类型
如果需要模拟异常场景(比如文件不存在、返回损坏的ZIP),只需替换getResourceAsStream的参数为对应测试文件,或者直接构造异常返回即可。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

