【发布时间】:2020-11-24 19:14:33
【问题描述】:
当我使用以下控制器/测试配置收到“请求的映射错误”时,目前正在努力解决问题。 控制器:
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
public class AdtechController {
private final AdtechService adtechService;
@PostMapping(value = "/subscriber/session")
public ResponseEntity<ResponseDto> submitSession(@RequestBody RequestDto requestDto) {
log.trace("execute submitSession with {}", requestDto);
ResponseDtoresponse = adtechService.submitSession(requestDto);
return new ResponseEntity<>(response, HttpStatus.OK);
}
@ExceptionHandler(AdtechServiceException.class)
public ResponseEntity<AdtechErrorResponse> handleAdtechServiceException(AdtechServiceException e) {
return new ResponseEntity<>(new AdtechErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage()), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
测试:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@SpringJUnitConfig({AdtechTestConfig.class})
public class AdtechControllerTest {
private static final ObjectMapper OBJECT_MAPPER = JsonUtil.getJackson();
@Autowired
private MockMvc mockMvc;
@Test
public void testSubmitSession() throws Exception {
RequestDto requestDto = new RequestDto ();
requestDto.setKyivstarId("1123134");
requestDto.setMsisdn("123476345242");
requestDto.setPartnerId("112432523");
requestDto.setPartnerName("125798756");
String request = OBJECT_MAPPER.writeValueAsString(requestDto);
System.out.println("REQUEST: " + request);
String response = OBJECT_MAPPER.writeValueAsString(new ResponseDto("123"));
System.out.println("RESPONSE: " + response);
mockMvc.perform(post("/subscriber/session")
.content(MediaType.APPLICATION_JSON_VALUE)
.content(request))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(containsString(response)));
}
}
配置:
@Configuration
public class AdtechTestConfig {
@Bean
public AdtechService adtechTestService() {
return requestDto -> new AdtechResponseDto("123");
}
}
测试执行后,我得到 没有 POST /subscriber/session 的映射
挣扎的原因是我来自其他具有相同配置的模块的代码工作正常。有人能指出我错过了什么吗?提前致谢!
【问题讨论】:
-
对于初学者来说,请自行决定要使用什么,Junit4 或 Junit5。目前你似乎正在混合两者。
-
@M.Deinum 你的意思是这部分:@RunWith(SpringRunner.class) ?我已经删除了它,现在它看起来像这样: SpringBootTest AutoConfigureMockMvc SpringJUnitConfig({AdtechTestConfig.class}) 仍然失败并出现同样的错误
-
您使用的是哪个
@Test注释?同时删除你想使用的@SpringJUnitConfig@SpringBootTest然后不要使用这个注解。 -
@M.Deinum 我正在使用 org.junit.jupiter.api.Test
-
所以您现在使用的是 JUnit5。该配置覆盖了 Spring Boot 测试,我怀疑您的测试配置(为什么需要它?)只是实际需要加载的版本的一半。所以删除它,你应该有
@SpringBootTest,这就足够了。
标签: java spring spring-boot mockito mockmvc