작성
·
1.2K
1
ApiTest에서 MockMvc를 사용한 테스트가 아닌 RestAssured를 사용하여 테스트하는 이유를 알 수 있을까요??
답변 3
2
자문자답
좋은 글을 찾아서 공유합니다
https://tecoble.techcourse.co.kr/post/2020-08-19-rest-assured-vs-mock-mvc/
강의 감사합니다
1
Steps를 재사용하기 위해 RestAssured를 사용했다고 이해하면 될까요?
현재는 ProductApiTest가 ApiTest라는 클래스를 상속받는 구조인데, ApiTest 클래스는 SpringBootTest를 사용해서 WebMvcTest에서 mockMvc를 사용하는 것보다 시간이 오래 걸린다는 단점이 있을거같은데 그거에 대해서는 어떻게 생각하시는지 궁금합니다 !
0
안녕하세요 김동호님 !
답변이 늦어서 죄송합니다.
예제에서는 각 도메인별 API를 요청하는 Steps라는 클래스를 만들어서
해당 객체로 API요청을 하고 있습니다.
Steps 객체는 Spring 의존성이 없이 API 요청을 보내 볼 수 있습니다.
mockMvc를 사용하기 위해서는 Steps가 mockMvc의존성을 주입받거나 해서
사용해야 될것 같은데요!
그래서 좀 더 간단하게 재사용 하기 위해 RestAssured를 사용했습니다.
감사합니다!
Steps를 재사용하기 위해 RestAssured를 사용했다고 이해하면 될까요?
맞습니다. MockMvcTest를 사용하는것보다 더 편리하게 API 테스트에 재사용할 수 있다고 생각했습니다.
WebMvcTest에서 mockMvc를 사용하는 것보다 시간이 오래 걸린다는 단점이 있을거같은데 그거에 대해서는 어떻게 생각하시는지
ApiTest는 IntegrationTest를 하려는 의도로 사용하기 때문에 layer를 테스트하려는 WebMvcTest와는 성격이 다른거 같습니다.
저의 경우 WebMvcTest를 사용하지는 않지만(필요성을 못느껴서 or 다른 방법으로 해결 할 수 있어서) 꼭 사용해야 한다면 플로우를 만들어가는 과정에서만 사용하고 이후에 IntegrationTest(SpringBootTest)로 바꾸거나 플로우가 만들어지고 나면 제거할 거 같습니다.
개인적으로는 도메인 로직을 테스트할 수 있는 단위테스트와 로직을 통합해서 결과를 확인하는 통합테스트만 있으면 되지 않을까 싶기도한데.. 그러기 위해서는 로직이 도메인에 잘 응집되어 있어야 할거같습니다.
해당 답변은 제가 경험한 환경에서만 답변을 드리는 것이니 필요하다면 환경에 맞게
당연히 사용하셔도 좋습니다. 🙂
(정답은 없습니다! 테스트가능한 코드를 만드는게 중요한 것!
테스트 가능하면 언제든지 더 좋게 만들 수 있기 때문에..)