-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[#4] Controller 및 테스트 코드 작성 #6
Conversation
build.gradle
Outdated
@@ -41,4 +41,8 @@ subprojects { | |||
test { | |||
useJUnitPlatform() | |||
} | |||
|
|||
bootJar { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
내일 이 얘기를 할 때가 된 것 같군요!! :-)
api 모둘과 dto 모듈을 나눈 이유에 대해서 |
|
||
implementation 'org.apache.commons:commons-lang3:3.14.0' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요건 뭐 .. 특별히 안된다고 보기는 어렵지만, 스프링에도 비슷한 기능을 하는 클래스들이 있지 않을까요? ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
spring-core 에도 비슷한 역할을 클래스가 있기는 한데, apache의 라이브러리를 계속 사용해왔던지라 사용하게 되었습니다.
혹시 관련해서 비추천 하는 이유가 있으실까요?
7주차 리뷰에서 말씀해주신 내용은 크게 다음과 같습니다.
관련해서 다음과 같은 방향으로 수정했습니다. 1. 모듈 구성에 명확한 의도가 드러나지 않는다.각 모듈에 대한 목적은 다음과 같습니다.
삭제한 모듈의 목적과 그 이유는 다음과 같습니다.
2. 컨트롤러 테스트 코드에서 어떤 점을 테스트하려고 했는지 불분명하다.최초 테스트 코드 작성시 input 과 output 에 대한 테스트 즉, API 스펙에 따른 요청/응답 메시지의 형태가 정확히 구현이 되었는지에 대한 테스트를 하는 코드를 작성했으나 의도가 불분명해진 것 같습니다. 따라서 다음 클래스들을 통해서 그 의도를 명확하고자 하였으며, 그 외 테스트 코드들은 부가적인(주로 validation) 테스트를 진행한 코드라고 보시면 될 것 같습니다.
|
|
||
ErrorResponseMessage errorResponseMessage = createErrorResponseMessage( | ||
MSG_FORMAT_PARAMETER_INVALID, exception.getParameterName(), ErrorCode.BR001); | ||
log.error("", exception); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
메세지에 뭘 넣을 수 있을지에 대해서도 추후에 고민해보시면 좋을 것 같네요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기본적인 메시지는 ErrorCode
라는 enum 에 정의를 해두었습니다만, 말씀주신대로 어떤걸 더 넣을 수 있을지는 추후에 고민해보도록 하겠습니다!
|
||
public class CommonTestFixture { | ||
|
||
public static ObjectMapper OBJECT_MAPPER = new ObjectMapper().registerModule(new JavaTimeModule()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이건 JavaTimeModule 때문에 넣으신건가요? 그렇다면, 이건 Test범위에서만 필요한 것인가요? 아니면, 모든 비지니스에서 필요한건아닌가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
모든 비즈니스에서 필요할 것 같긴한데, 아직 실제로 사용되지는 않아서 테스트 코드에서만 사용할 수 있도록 위와 같이 작성하였습니다. 추후 비즈니스에서 실제로 사용할 때 테스트 코드도 비즈니스에서 사용하는 object mapper bean 으로 가져오도록 수정할 예정입니다. 😎
|
||
@SpringBootTest | ||
@AutoConfigureMockMvc | ||
@Tag("integration-test") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 Tag는 나중에 어떤 역할을 하게 되나요? (아직 전부다 보지 않아서 ㅜㅠ)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
빌드시 통합 테스트는 테스트에서 제외하기 위해 Tag를 사용하였습니다.
현재도 bp-app-api 모듈의 build.gradle 에 적용해 두었습니다!
@RequestParam(name = "sort", required = false, defaultValue = "registeredDate") final String sort, | ||
@RequestParam(name = "page", required = false, defaultValue = "0") final int page, | ||
@RequestParam(name = "count", required = false, defaultValue = "10") final int count, | ||
@RequestParam(name = "order", required = false, defaultValue = "asc") final String order) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
asc, desc 말고, lastest, oldest 같은 것들이 좀 더 의미를 잘 전달하지 않을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
항상 registeredDate(등록일자) 기준으로 정렬하는건 아닙니다. rate(평점) 순으로 정렬할 수도 있고, 추후에 정렬이 될 수 있는 기준이 추가될 수 있기 때문에 asc, desc 를 사용하였습니다.
} | ||
|
||
private void validateCount(Integer count) { | ||
if (count > 100 || count < 0) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
만약에 validation로직이 복잡해 진다면?
@Autowired | ||
private MockMvc mockMvc; | ||
|
||
@MockBean |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ReviewService를 구현했는데, 굳이 Mocking할 필요가 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
맞습니다. 이 부분은 다음 PR 떄 수정하도록 하겠습니다. 🙏
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
몇 가지 이야기거리들이 있지만, 대체로 좋은 것 같습니다! :-) 고생하셨습니다.
Shop Controller 일부(Shop 등록, Shop 리스트 조회)와 그에 해당하는 테스트 코드 작성하였습니다.
아래와 같이 테스트 해야 할 항목들을 정해서 테스트 코드를 작성해 나갔습니다.
Shop Controller 뿐만 아니라 다른 테스트 코드들도 계속해서 작성해 나갈 예정입니다.😅
이외에 추가로 궁금한 부분이 있습니다.
bp-dto
모듈 아래에 있는ShopRegistrationRequest.Address
의 멤버 변수들이면 충분할까요? => 오픈 API - 주소기반산업지원서비스를 참고해서 일단 필요할 것 같은 데이터들을 구성해보았습니다.)