저는 스프링 부트에 아주 익숙하며 기본 마이크로 서비스를 함께 받았습니다 (Yelp URL을 받아들이고 해당 레스토랑의 이미지를 긁어냅니다). 몇 가지 단위 테스트를 작성하는 것이 좋은시기라고 생각했지만, 문제가있는 한 가지는 서블릿 요청/응답에 대한 테스트에 모의 클래스를 주입하는 것입니다.스프링 부트 - 서블릿 요청/응답 테스트, 가짜 클래스 삽입 방법
테스트하려는 코드는 매우 간단합니다. 이것은 기본적으로 내 서비스의 진입 점이며 JSON 본문을 받아들이고 Yelp url을 추출한 다음 YelpRequestController.makeYelpRequest()
은 이미지를 스크랩하고 ArrayList에 이미지 링크를 반환합니다.
@RestController
public class RequestController {
@PostMapping(value = "/")
public ArrayList<String> index(@RequestBody String reqBodyString) {
//my own function to parse the json string
HashMap<String, String> requestBody = parseReqBodyString(reqBodyString);
String yelpURL = requestBody.get("yelpURL");
YelpRequestController yelpRequest = new YelpRequestController(yelpURL);
ArrayList<String> yelpImgLinks = yelpRequest.makeYelpRequest();
return yelpImgLinks;
}
}
이것은 단위 테스트 코드입니다. 그것은 기본적으로 JSON 문자열을 만들고 내 RequestController에 요청을 보내고 응답이 괜찮은지 확인합니다. 지금 당장 통과하지만, 시험을 단지 RequestController
과 그 밖의 아무것도 시험하지 않기를 바란다. 현재는 테스트에서 URL을 YelpRequestController
을 통해 전송하고이 테스트에서 RequestController
을 분리하고자하므로 이미지를 스크래핑하기 시작합니다. 나는 YelpRequestController
클래스를 조롱하고 결과를 반환하려했지만 정말 많은 문제가 있습니다.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class RequestControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void postRequestController() throws Exception {
ObjectMapping jsonObject = new ObjectMapping();
jsonObject.setYelpUrl("https://www.yelp.ca/biz/l-industrie-pizzeria-brooklyn");
Gson gson = new Gson();
String json = gson.toJson(jsonObject);
mvc.perform(MockMvcRequestBuilders.post("/")
.accept(MediaType.APPLICATION_JSON)
.content(json))
.andExpect(status().isOk());
}
}
내가 Mockito를 사용하고, 다른 클래스를 조롱하고 테스트 클래스에 주입하는 방법을 이해하는 방법에 대해 읽어 봤는데. 그러나 나는 그것을 여기에서 적용하려고 정말로 붙이게된다. 어떤 도움을 주시면 감사하겠습니다.
:
을 테스트 클래스에서 당신은 당신이 자동으로
@Autowired
필드를 사용합니다@MockBean
봄과 조롱 할 클래스에 주석을 YelpRequestController를 SPring 빈으로 만듭니다. 귀하의 RequestController에서 Autowire하십시오. yelpURL을 생성자가 아닌 makeYelpRequest() 메서드에 전달하여 상태 비 저장 개체로 만듭니다. 그런 다음 유닛 테스트에서 모의 YelpRequestController를 RequestController에 삽입 할 수 있습니다. 테스트 가능성은 의존성 주입에 관한 것입니다. 'new'를 사용하여 의존성을 직접 만들면 모의 의존성을 주입 할 수 없게됩니다. –아, 고맙습니다. – user2889046