[SPRING] Spring REST 모의 컨텍스트 경로
SPRINGSpring REST 모의 컨텍스트 경로
다음 코드 스 니펫을 사용하여 spring rest mocks의 컨텍스트 경로를 설정하려고합니다.
private MockMvc mockMvc;
@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
.apply(documentationConfiguration(this.restDocumentation))
.alwaysDo(document("{method-name}/{step}/",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint())))
.build();
}
@Test
public void index() throws Exception {
this.mockMvc.perform(get("/").contextPath("/api").accept(MediaTypes.HAL_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("_links.business-cases", is(notNullValue())));
}
그러나 다음과 같은 오류가 나타납니다.
java.lang.IllegalArgumentException: requestURI [/] does not start with contextPath [/api]
뭐가 잘못 되었 니? 예를 들어 코드에서 한 곳에서 contextPath를 지정할 수 있습니까? 빌더에서 직접?
여기 컨트롤러
@RestController
@RequestMapping(value = "/business-case", produces = MediaType.APPLICATION_JSON_VALUE)
public class BusinessCaseController {
private static final Logger LOG = LoggerFactory.getLogger(BusinessCaseController.class);
private final BusinessCaseService businessCaseService;
@Autowired
public BusinessCaseController(BusinessCaseService businessCaseService) {
this.businessCaseService = businessCaseService;
}
@Transactional(rollbackFor = Throwable.class, readOnly = true)
@RequestMapping(value = "/{businessCaseId}", method = RequestMethod.GET)
public BusinessCaseDTO getBusinessCase(@PathVariable("businessCaseId") Integer businessCaseId) {
LOG.info("GET business-case for " + businessCaseId);
return businessCaseService.findOne(businessCaseId);
}
}
해결법
-
==============================
1.얻을 패스에 컨텍스트 경로를 포함시켜야합니다.
얻을 패스에 컨텍스트 경로를 포함시켜야합니다.
질문에 표시 한 경우 컨텍스트 경로는 / api이고 /에 요청하면 / api /를 전달해야합니다.
@Test public void index() throws Exception { this.mockMvc.perform(get("/api/").contextPath("/api").accept(MediaTypes.HAL_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("_links.business-cases", is(notNullValue()))); }
-
==============================
2.많은 사람들이하는 일은 단순히 mockMvc 테스트에서 컨텍스트 경로를 사용하지 않는 것입니다. @RequestMapping URI 만 지정하면됩니다.
많은 사람들이하는 일은 단순히 mockMvc 테스트에서 컨텍스트 경로를 사용하지 않는 것입니다. @RequestMapping URI 만 지정하면됩니다.
@Test public void index() throws Exception { this.mockMvc.perform(get("/business-case/1234").accept(MediaTypes.HAL_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("_links.business-cases", is(notNullValue()))); }
from https://stackoverflow.com/questions/35435631/spring-rest-mock-context-path by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] keycloak을 사용하여 웹 페이지를 제공하는 클라이언트와 함께 예약 된 작업을 사용하려면 어떻게해야합니까? (0) | 2019.05.15 |
---|---|
[SPRING] Spring 데이터 나머지 : 다른 객체의 키로 검색하는 방법? (0) | 2019.05.15 |
[SPRING] 새 트랜잭션 범위 내에서 개체 업데이트 (0) | 2019.05.15 |
[SPRING] Spring IllegalStateException : JTA EntityManager는 getTransaction ()을 사용할 수 없다. (0) | 2019.05.15 |
[SPRING] Spring Data JPA : "여러 속성으로 삭제"방법은 어떻게 작성합니까? (0) | 2019.05.15 |