当前位置: 首页 > 知识库问答 >
问题:

错误请求错误单元测试多部分Spring座

方鸿羲
2023-03-14

我定义了下一个单元测试来测试用于上传文件的控制器:

 public class PhenotypeControllerTest extends BaseControllerTest{

        private MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(),
                MediaType.APPLICATION_JSON.getSubtype(),
                Charset.forName("utf8"));

        @Before
        public void setup() throws Exception {
            super.setup();
        }

        @Test
        public void loadPhenotype_success() throws Exception{
            //mock uuid generation
            UUID idFile = UUID.randomUUID();
             //Generate the response
             ResponseLoad resp = new ResponseLoad();
             resp.setFileIdentifier(idFile);
             resp.setStatus(Status.FINISHED);
             resp.setDescription(null);

             MockMultipartFile phenoFile  = new MockMultipartFile("size_trans_20160419_KM2.txt","size_trans_20160419_KM2.txt", ContentType.TEXT_PLAIN.toString(), new FileInputStream("src/test/resources/size_trans_20160419_KM2.txt"));
             mockMvc.perform(MockMvcRequestBuilders.fileUpload("/phenotypes/load")
                                    .file(phenoFile))
                                    .andExpect(status().isOk())
                                    .andExpect(content().contentType(this.contentType))
                                    .andExpect(content().json(json(resp)));
        }
    }
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@WebAppConfiguration
@TestPropertySource(locations="classpath:application.test.properties")
public abstract class BaseControllerTest {

    protected MockMvc mockMvc;

    @SuppressWarnings("rawtypes")
    protected HttpMessageConverter mappingJackson2HttpMessageConverter;

    @Autowired
    protected WebApplicationContext webApplicationContext;

     @Autowired
    void setConverters(HttpMessageConverter<?>[] converters) {

        this.mappingJackson2HttpMessageConverter = Arrays.asList(converters).stream()
            .filter(hmc -> hmc instanceof MappingJackson2HttpMessageConverter)
            .findAny()
            .orElse(null);

        assertNotNull("the JSON message converter must not be null",
                this.mappingJackson2HttpMessageConverter);
     }

     public void setup() throws Exception {
            this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
     }

     @SuppressWarnings("unchecked")
    protected String json(Object o) throws IOException {
        MockHttpOutputMessage mockHttpOutputMessage = new MockHttpOutputMessage();
        this.mappingJackson2HttpMessageConverter.write(
                o, MediaType.APPLICATION_JSON, mockHttpOutputMessage);
        return mockHttpOutputMessage.getBodyAsString();
    }
}
@ApiOperation(value = "Load Phenotype File", nickname = "loadPhenotype",
        tags = {"Phenotypes"} )
        @ApiResponses({
            @ApiResponse(code = 200, message = "Nice!", response = Response.class),
            @ApiResponse(code = 507, message = "Error uploading files")
        })
@PostMapping(value="/phenotypes/load", produces = "application/json")
public ResponseEntity<ResponseLoad> uploadPhenotype(
        @ApiParam(value="Phenotype File", required=true) 
        @RequestPart(required = true) MultipartFile file){
    //1. Validate parameters
    ResponseLoad response = new ResponseLoad();
    response.setStatus(Status.FINISHED);
    //2. Copy file to /tmp/SNPaware/phenotypes/tmp/<UUID>.pheno
    response.setFileIdentifier(UUID.randomUUID());
    logger.info("Storage phenotype file with identifier "+response.getFileIdentifier());
    storageService.store(file, "tmp/"+response.getFileIdentifier()+".pheno");

    return ResponseEntity.ok(response);
}

为什么我在考试中得了400分?我是不是错过了测试中的某些配置?

共有1个答案

白越
2023-03-14

问题出在测试中multipartFile的定义上。在本案例文件中,原始名称应该与控制器中的参数名称匹配。

这个定义解决了这个问题:

 MockMultipartFile phenoFile = new MockMultipartFile("file", "size_trans_20160419_KM2.txt", ContentType.TEXT_PLAIN.toString(), new FileInputStream("src/test/resources/size_trans_20160419_KM2.txt"));
 类似资料:
  • 我试图写一个通用代码上传文件到任何服务器(多部分职位)。< br >我已经在我的代码和各种stackoverflow解决方案中尝试了不同的头和请求类型,但仍然无法上传任何文件。 我不断收到以下HTML消息作为响应: 400 BAD请求 如何在Android中编写一个通用代码将文件上传到服务器?< br > Android代码:< br > 用于测试文件上传的 PHP 代码:

  • 我正在使用Swagger编辑器来记录Node中内置的现有API,但它一直给我以下错误: 路径上的架构错误。/上载/Rate.post.parameters[0]不完全是来自 此错误出现在我代码的 3 个位置: paths./upload/Rate.post。参数[0] paths./upload/Rate.post。参数[1] paths./users/register.post.paramete

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 我得到了这个错误,有什么想法会导致它吗?我试图发送一个DTO,它有一个扩展抽象类的对象列表,我想这个问题可能是因为DTO中的列表,还是因为抽象类的子类?

  • 我目前运行的是spring boot V1.3.0.build-Snapshot和spring V4.2.2.build-Snapshot。 如果我尝试执行多文件上载(通过angular): 我得到了错误: [WARN]org.eclipse.jetty.server.request-java.io.ioException:org.eclipse.jetty.util.multipartInput