我编写了controller,它为每个映射使用了不同的值。现在我将它简化为对所有映射使用相同的值,但是我不知道如何使test工作,因为它在每个映射上都返回404。
这里是我的控制器:
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/v1")
public class TaskController {
@Autowired
DbService dbService;
@Autowired
TaskMapper taskMapper;
@GetMapping(value = "/tasks")
public List<TaskDto> getTasks() {
return taskMapper.mapToTaskDtoList(dbService.getAllTask());
}
@GetMapping(value = "/tasks/{id}")
public TaskDto getTask(@PathVariable Long id) throws TaskNotFoundException {
return taskMapper.mapToTaskDto(dbService.getTask(id).orElseThrow(TaskNotFoundException::new));
}
@DeleteMapping(value = "/tasks/{id}")
public void deleteTask(@PathVariable Long id) {
dbService.deleteTask(id);
}
@PutMapping(value = "/tasks")
public TaskDto updateTask(@RequestBody TaskDto taskDto) {
return taskMapper.mapToTaskDto(dbService.saveTask(taskMapper.mapToTask(taskDto)));
}
@PostMapping(value = "/tasks", consumes = APPLICATION_JSON_VALUE)
public void createTask(@RequestBody TaskDto taskDto) {
dbService.saveTask(taskMapper.mapToTask(taskDto));
}
}
和我的测试:
@RunWith(SpringRunner.class)
@WebMvcTest(TaskController.class)
public class TaskControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private DbService dbService;
@MockBean
private TaskMapper taskMapper;
@Test
public void shouldFetchAllTasks() throws Exception {
//Given
List<TaskDto> tasks = new ArrayList<>();
tasks.add(new TaskDto(1L, "test", "testing"));
tasks.add(new TaskDto(2L, "test2", "still_testing"));
when(taskMapper.mapToTaskDtoList(dbService.getAllTask())).thenReturn(tasks);
//When & Then
mockMvc.perform(get("/v1/task/tasks").contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(2)))
.andExpect(jsonPath("$[0].id", is(1)))
.andExpect(jsonPath("$[0].title", is("test")))
.andExpect(jsonPath("$[0].content", is("testing")))
.andExpect(jsonPath("$[1].id", is(2)))
.andExpect(jsonPath("$[1].title", is("test2")))
.andExpect(jsonPath("$[1].content", is("still_testing")));
}
@Test
public void shouldFetchGivenTask() throws Exception {
//Given
List<TaskDto> tasks = new ArrayList<>();
tasks.add(new TaskDto(1L, "test", "testing"));
tasks.add(new TaskDto(2L, "test2", "still_testing"));
when(dbService.getTask(anyLong())).thenReturn(Optional.of(new Task(2L, "test2", "still_testing")));
when(taskMapper.mapToTaskDto(anyObject())).thenReturn(tasks.get(1));
//When & Then
mockMvc.perform(get("/v1/task/tasks/{id}", "2")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id", is(2)))
.andExpect(jsonPath("$.title", is("test2")))
.andExpect(jsonPath("$.content", is("still_testing")));
}
@Test
public void shouldUpdateTask() throws Exception {
//Given
TaskDto taskDto = new TaskDto(1L, "test", "testing");
TaskDto updatedTaskDto = new TaskDto(1L, "updated task", "even more testing");
when(taskMapper.mapToTaskDto(dbService.saveTask(taskMapper.mapToTask(taskDto)))).thenReturn(updatedTaskDto);
Gson gson = new Gson();
String jsonContent = gson.toJson(taskDto);
//When & Then
mockMvc.perform(put("/v1/task/tasks")
.contentType(MediaType.APPLICATION_JSON)
.content(jsonContent))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id", is(1)))
.andExpect(jsonPath("$.title", is("updated task")))
.andExpect(jsonPath("$.content", is("even more testing")));
}
@Test
public void shouldDeleteTask() throws Exception {
//Given
//When & Then
mockMvc.perform(delete("/v1/task/tasks/{id}","1"))
.andExpect(status().isOk());
}
@Test
public void shouldCreateTask() throws Exception {
//Given
//When & Then
mockMvc.perform(post("/v1/task/tasks")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"title\":\"another test\"," +
"\"content\":\"keep on testing\"}"))
.andExpect(status().isOk());
}
}
404及以下所有测试结果:
在org.springframework.test.util.assertionerrors.fail(assertionerrors.java:59)在org.springframework.test.web.servlet.result.assertionerrors.assertequals(assertionerrors.java:98)在org.springframework.test.web.servlet.statusresultmatchers.lambda$matcher$9(statusresultmatchers.java:619)在7)在org.junit.internal.runners.statements.invokeMethod.evaluate(invokeMethod.Java:17)在org.springframework.test.context.junit4.statements.runbeforestexecutioncallbacks.evaluate(runbeforestexecutioncallbacks.Java:74)在org.springframework.test.context.junit4.statements.runaftertestexecutioncallbacks.evaluate(org.junit.runners.ParentRunner$3。Run(ParentRunner.Java:290)在org.junit.runners.ParentRunner.Runchildren(ParentRunner.Java:71)在org.junit.runners.ParentRunner.Runchildren(ParentRunner.Java:288)在org.junit.runners.ParentRunner.Access(ParentRunner.Java:58)在org.junit.runners.ParentRunner.Access$000(ParentRunner.Java:58)在7)在com.intellij.rt.execution.junit.junitstarter.PrepareStreamsandStart(junitstarter.java:242)在com.intellij.rt.execution.junit.junitstarter.main(junitstarter.java:70)
url-/v1/task/tasks
不存在于控制器中的任何请求映射中。您的类级控制器具有/v1
请求映射,而您的方法级请求映射具有/tasks
而不是/task
,因此您将得到404 not found错误。
我在过去一周一直在研究,无法找到解释为什么我在springMVC中的测试用例会抛出404。它会记录未找到页面的警告。我非常确定我的配置是正确的,并且应用程序上下文已加载。为什么mockMvc不执行请求并返回200状态等。? 这是我的测试课: 跟踪以及控制台日志: 最后是我的背景。xml: 如果还需要什么来分析这个问题,请告诉我。
问题内容: 我编写了一个测试UsersController的单元测试。UsersControllerTest.findUser工作正常,但不能正常运行UsersControllerTest.insertGetModifyDelete。 在测试日志中,我可以看到POST请求与UsersController的任何方法都不匹配,但是我不明白为什么。您能帮我这个吗? 这是我其余的Java类: 我有2种方法
我正在尝试为我的Spring项目运行集成测试,它是一个简单的get方法,用于从DB返回给定id的字符串输出。但是在Mockmvc中,我一直在Mockmvc上得到一个NullPointerException。在我的测试范围内执行。 以下是测试: 这里是控制器-输出控制器: 完全错误是:
我有以下控制器: 重启控制器。爪哇 我已经使用mockMvc对web层进行了测试,用户服务bean按照标准进行了模拟: 重启控制器监控测试。爪哇 test正在返回404而不是200状态,并且没有返回正文中的错误消息,这暗指404不是“真正的”404(它没有返回,因为正确的响应正在返回,它返回是因为其他原因)。我还认为其他404状态中的一些可能会在相同的上下文中返回。
共享Api实现类,添加preauthorize-admin,查看所有用户 这是我的JUnit测试,我发送get请求并返回403错误。
Spring靴1.5.9及以下版本: 我一直得到:WARNo.s.web.servlet.PageNotFind-没有找到HTTP请求与URI[api/v1/app/pool]在DispatcherServlet与名称的映射”