【问题标题】:Micronaut test fileuploadMicronaut 测试文件上传
【发布时间】:2021-05-27 09:51:47
【问题描述】:

我想测试一个接收 CompletedFileUpload 的方法。

public void uploadZip(String orderId, CompletedFileUpload fileUpload) throws IOException {

    Path path = Files.createTempFile("file-", "-temp");
    File tempFile = path.toFile();
    try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
        outputStream.write(fileUpload.getBytes());
        someMethod(orderId, tempFile);
    }
}

CompletedFileUpload 是一个接口:

package io.micronaut.http.multipart;

public interface CompletedFileUpload extends FileUpload, CompletedPart {
}

我想找到一种模拟文件上传的方法,对于我发现的 spring boot:

MockMultipartFile multipartFile =
                new MockMultipartFile("springboot.png", "springboot.png", "image/png", "".getBytes());

我可以在 Micronaut 中使用类似的东西吗?

【问题讨论】:

    标签: java mocking micronaut


    【解决方案1】:

    您可以像 Spring 一样构建自己的 MockFileUpload 测试类:

    public class MockFileUpload implements CompletedFileUpload {
    
        private final String filename;
    
        private final MediaType mediaType;
    
        private final byte[] content;
    
        public MockFileUpload(String filename, MediaType mediaType) {
            this(filename, mediaType, null);
        }
    
        public MockFileUpload(String filename, MediaType mediaType, @Nullable byte[] content) {
            this.filename = filename;
            this.mediaType = mediaType;
            this.content = (content != null ? content : new byte[0]);
        }
    
        @Override
        public InputStream getInputStream() throws IOException {
            return new ByteArrayInputStream(content);
        }
    
        @Override
        public byte[] getBytes() throws IOException {
            return content;
        }
    
        @Override
        public ByteBuffer getByteBuffer() throws IOException {
            return ByteBuffer.wrap(content);
        }
    
        @Override
        public Optional<MediaType> getContentType() {
            return Optional.of(mediaType);
        }
    
        @Override
        public String getName() {
            return filename;
        }
    
        @Override
        public String getFilename() {
            return filename;
        }
    
        @Override
        public long getSize() {
            return content.length;
        }
    
        @Override
        public long getDefinedSize() {
            return content.length;
        }
    
        @Override
        public boolean isComplete() {
            return true;
        }
    }
    

    然后在你的测试中你可以这样使用这个类:

    CompletedFileUpload file = new MockFileUpload("invoice.pdf", MediaType.APPLICATION_PDF_TYPE);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-22
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      相关资源
      最近更新 更多