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

无法测试控制器的CSV上载java spring

谢英耀
2023-03-14

我有一个工作控制器,用于在发布请求中上传csv。邮递员状态200,测试时状态400。我正在努力看看问题是什么。

控制器:

@RestController
@RequestMapping("/csv")
public class CsvController {
    final CsvService csvService;

    public CsvController(CsvService csvService) {
        this.csvService = csvService;
    }

    @PostMapping("/upload")
    public ResponseEntity<Response> uploadFile(@RequestParam("file")MultipartFile file) {
        if(CsvHelper.hasCSVFormat(file)) {
            Response response = csvService.save(file);

            return new ResponseEntity<>(response, HttpStatus.valueOf(response.getStatus()));
        }

        Response response = new Response().setStatus(400).setMessage("Please upload a CSV file");
        return new ResponseEntity<>(response, HttpStatus.valueOf(response.getStatus()));
    }
}

CsvHelper Util:

public class CsvHelper {
    public static String TYPE = "text/csv";

    public static boolean hasCSVFormat(MultipartFile file) {
        return TYPE.equals(file.getContentType());
    }
}

测试

@ExtendWith(SpringExtension.class)
@WebMvcTest(value = CsvController.class)
public class TestControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private CsvService csvService;

    @Test
    void status200WhenUploadingCSV() throws Exception {
        MockMultipartFile mockMultipartFile = new MockMultipartFile(
                "multipartFile",
                "template.csv",
                "text/csv",
                new ClassPathResource("template.csv").getInputStream());

        mockMvc.perform(MockMvcRequestBuilders.multipart("/csv/upload")
                .file(mockMultipartFile))
                .andExpect(status().isOk());
}}

当测试失败时,我可以看到这个已解决的异常:类型=org.springframework.web.multipart.support.MissingServletRequest estPartException

共有2个答案

宗政永望
2023-03-14

当多部分文件@RequestParam(“file”)文件为空或未接收任何属性时,有时会发生此异常。你可以在这里看到。也许它可以解决你的问题。或者,您可以在应用程序中指定文件大小。属性文件为:

    spring.http.multipart.max-file-size=10MB
    spring.http.multipart.max-request-size=11MB
艾哲
2023-03-14

此错误是由于您上载的文件大小所致。它可以通过设置最大上载大小来固定。

将此添加到主类。

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(10000000L);
    return new CommonsMultipartResolver();
}
 类似资料:
  • 英文原文:http://emberjs.com/guides/testing/testing-controllers/ 单元测试方案和计算属性与之前单元测试基础中说明的相同,因为Ember.Controller集成自Ember.Object。 针对控制器的单元测试使用ember-qunit框架的moduleFor来做使这一切变得非常简单。 测试控制器操作 下面给出一个PostsController

  • spring-test模块对测试控制器@Controller提供了最原生的支持。详见14.6 "Spring MVC测试框架"一节。

  • 我正在尝试为springboot应用程序中的一个简单控制器编写一个测试。但是,由于为我的TopicRepository和topiccontroller创建bean而收到错误。我参考了一个教程,对spring boot开发并不陌生,所以不确定它是如何工作的。我怎样才能使测试工作? 控制器测试 控制器 专题存储库 我得到的错误是 UnsatisfiedDependencyException:创建名为'

  • 我试图用JUnit5控制台启动器运行一个简单的测试。我试了几个选择,但都不起作用。谁能告诉我哪里出了问题吗? .+--JUnit Jupiter[OK] '--JUnit Vintage[OK] 测试运行在11毫秒后完成[2个容器] [0个容器跳过][2个容器启动] [0个容器中止][2个容器成功] [0个容器失败][0个测试找到] [0个测试跳过][0个测试启动] [0个测试中止][0个测试成功

  • 问题内容: 我正在尝试使用JUnit5控制台启动器运行一个简单的测试。我尝试了几种选择,但是没有用。有人可以告诉我哪里出了问题吗? 给我警告 我试图在目录中运行所有测试,但这似乎找不到测试: 结果是这样的: 。+-JUnit Jupiter [确定] ‘-JUnit Vintage [确定] 11毫秒后测试运行完成[找到2个容器] [跳过0个容器] [0个容器中止] [2个容器成功] [0个容器失

  • 问题内容: 我正在使用simple_form gem并生成表单,我正在指定remote:true选项,如下所示: 因此,表单的输出html是以下片段: 正如我检查的那样,当使用 remote:true 选项时,使用标准的form_for帮助器将 data-remote =’true’添加 到表单中。从生成的html中可以看到,当我使用simple_form gem时,也有这样的属性。 __ 因此,