我对弹簧靴和Junit还不熟悉。我正在为我的控制器编写一个小的Junit测试用例。我的控制器文件如下所示:
@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测试案例如下所示:
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测试用例吗?
@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);
} 发布于 2022-11-30 10:54:41
您可以使用.andExpect()方法来验证请求的状态,而不是使用assertEquals()
您可以使用这些行中的某些内容来测试端点调用:
mockMvc.perform(post("/project-files/deleteUploadedFile")
.param("params", "some_value_here"))
.andExpect(status().isOk());在您的控制器中,我发现一些奇怪的事情是,您使用@ instead来删除您可以使用@DeleteMapping而不是请看这里的春季文档
此外,您还应该对参数名称使用更多的描述性名称(一般情况下)。
弦旁线
不要真正提醒这个变量所代表的是什么。
如果问题仍然存在,请确保按建议发布整个堆栈跟踪。
*记住,通常在编写测试时,您是在模仿真正调用的行为,所以不要添加无用的检查或模拟
@InjectMocks
private serviceImpl serviceImpl;
@InjectMocks
dataRepoImpl repoImpl;我在你的控制器中没有看到上面的内容,所以我不知道为什么它们是测试的一部分。
https://stackoverflow.com/questions/74622536
复制相似问题