首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >contoller文件的Junit测试用例中的错误

contoller文件的Junit测试用例中的错误
EN

Stack Overflow用户
提问于 2022-11-30 03:23:45
回答 1查看 42关注 0票数 0

我对弹簧靴和Junit还不熟悉。我正在为我的控制器编写一个小的Junit测试用例。我的控制器文件如下所示:

代码语言:javascript
复制
    @RequestMapping(path = "/project-files")
    public class MyController {

        private RequestModel setRequestModel(String params) {
        RequestModel requestModel = new RequestModel();
        requestModel.setRequestData(params);
        return requestModel;
        }

        @PostMapping("/deleteUploadedFile")
        @ResponseBody
        public Map<String, Object> deleteUploadedFile(@RequestParam(value = "requestData", required = false)    String params) {
        RequestModel requestModel = setRequestModel(params);
        return service.deleteUploadedFile(requestModel);
        }
    }

基于来自这里的引用,我试图为我的控制器编写一个junit。

我的Junit测试案例如下所示:

代码语言:javascript
复制
    package com.test.project.web;

    import static org.junit.Assert.assertEquals;
    import static org.junit.Assert.assertNotNull;
    import static org.mockito.ArgumentMatchers.anyMap;
    import static org.mockito.Mockito.when;

    import java.io.IOException;
    import java.util.Map;

    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.mockito.InjectMocks;
    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
    import org.springframework.http.MediaType;
    import org.springframework.test.context.junit4.SpringRunner;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.MvcResult;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;

    import com.test.project.beans.RequestModel;
    import com.test.project.service.serviceImpl;
    import com.fasterxml.jackson.core.JsonParseException;
    import com.fasterxml.jackson.databind.JsonMappingException;
    import com.fasterxml.jackson.databind.ObjectMapper;

    @RunWith(SpringRunner.class)
    @WebMvcTest(MyController.class)
    public class MyControllerTest<mapFromJson> {

    @InjectMocks
    private serviceImpl serviceImpl;

    @InjectMocks
    dataRepoImpl repoImpl;

    @InjectMocks
    MyController myController;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(new MyController()).build();
    }

     protected <T> T mapFromJson(String json, Class<T> clazz) throws
     JsonParseException, JsonMappingException, IOException {
     
     ObjectMapper objectMapper = new ObjectMapper(); return
     objectMapper.readValue(json, clazz); 
     }
    

    @Test
    public void deletefile() throws Exception {
        String uri = "/deleteUploadedFile";
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON_VALUE))
                .andReturn();
        int status = mvcResult.getResponse().getStatus();
        assertEquals(200, status);
        String content = mvcResult.getResponse().getContentAsString();
        MyController[] productlist = super.mapFromJson(content, MyController[].class);
        assertTrue(productlist.length > 0);
        }
    }

我在犯错误

java.lang.IllegalStateException:未能加载ApplicationContext

还有其他更好的方法来为控制器编写Junit测试用例吗?

代码语言:javascript
复制
 @Test public void deletefile() throws Exception { 
      MvcResult mvcResult = mockMvc.perform(post("/project-files/deleteUploadedFile") //Getting error in post.
                .param("params", "some_value_here"))
                .andExpect(status().isOk()); //Getting error in status
      String content = mvcResult.getResponse().getContentAsString(); 
      productlist = super.mapFromJson(content, MrmController[].class); //Getting error in productlist & mapFromJson
      assertTrue(productlist.length > 0);
  } 
EN

回答 1

Stack Overflow用户

发布于 2022-11-30 10:54:41

您可以使用.andExpect()方法来验证请求的状态,而不是使用assertEquals()

您可以使用这些行中的某些内容来测试端点调用:

代码语言:javascript
复制
 mockMvc.perform(post("/project-files/deleteUploadedFile")
                .param("params", "some_value_here"))
                .andExpect(status().isOk());

在您的控制器中,我发现一些奇怪的事情是,您使用@ instead来删除您可以使用@DeleteMapping而不是请看这里的春季文档

此外,您还应该对参数名称使用更多的描述性名称(一般情况下)。

弦旁线

不要真正提醒这个变量所代表的是什么。

如果问题仍然存在,请确保按建议发布整个堆栈跟踪。

*记住,通常在编写测试时,您是在模仿真正调用的行为,所以不要添加无用的检查或模拟

代码语言:javascript
复制
@InjectMocks
    private serviceImpl serviceImpl;

    @InjectMocks
    dataRepoImpl repoImpl;

我在你的控制器中没有看到上面的内容,所以我不知道为什么它们是测试的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74622536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档