0. 소개1. 네이밍2. 자동화3. 통합 테스트 코드 예제IntegrationTest.javaDatabaseInitializerSecurity 관련CallIntegrationTest.java → requestBody 사용 예시AgentIntegrationTest.java → query/pathParameter, responseBody 사용 예시
0. 소개
이 글은 restDocs 적용에 대한 부분은 다루고 있지 않습니다.
restDocs 적용 이후 테스트코드를 어떻게 구성할지 고민이신 분들께 도움이 되리라 생각합니다.
1. 네이밍
- 채택한 테스트 코드 메서드 네이밍 :
should_기대결과_When_테스트상태 - ex)
Should_ThrowException_WhenDuplicateNickname - 이 방식은 'Behavior-Driven Development' (BDD)에 영감을 받은
Given-When-Then패턴을 반영한 것으로, 테스트의 의도를 명확하게 전달하기에 채택했다. - 참고 : 공백이나 특수문자 사용 하지 말아라
2. 자동화
restDocs 위한 테스트코드 자동으로 뽑아주는 라이브러리 없나,,,, → 라이브러리는 없지만, 몇 개 예시를 직접 만들어둔 후 코파일럿을 활용하기로 했다.
3. 통합 테스트 코드 예제
IntegrationTest.java
IntegrationTest 라는 추상 클래스를 만들어 세팅 관련한 코드들을 넣어주었다.
중복코드를 줄이기 위해 모든 테스트 클래스가 상속하는 추상 클래스를 만들어 둔 것이다.
DatabaseInitializer
테스트 시 데이터베이스에 직접 데이터를 저장하거나, 조회하는 등의 api 테스트 정도의 테스트를 진행할 일이 생길 수 있다.
이 경우, 주의할 점은 각 테스트들은 독립적이어야 하기에 테스트를 돌 때마다 데이터베이스를 clear 해주는 작업이 필요하단 점이 있다. 이는 ddl-auto를 테스트에 대해선 create-drop 방식을 택함으로써 해결해주었다.
더 나아가, 매 테스트마다 공통으로 필요한 데이터가 있다면 더미 데이터 개념으로 매 테스트 시작 시 미리 넣어줄 수도 있다. 이는 아래 코드와 같이 구현해주었다.
예시가 좀 많긴 한데, 연관관계가 필요한 친구들은 메서드 인자로 주고 받게 해줬다. id가 필요한 경우가 꽤 많아서, 생성된 각 도메인의 getId 메서드는 넣어줬다.
Security 관련
해당 부분은 내용이 많아 다음 포스트로 끊어 넣었습니다.
예제를 실제로 사용해보고 싶으신 분들은 다음 포스트를 보고 오심 좋을 거 같습니다.
전체적인 흐름을 보고 싶으신 분들은 바로 아래로 넘어 가셔도 좋습니다.
CallIntegrationTest.java → requestBody 사용 예시
requestBody 가 존재하는 예시 코드 입니다. 원래 코드를 간략화 해서 핵심 내용만 담아 재구성했습니다.
AgentIntegrationTest.java → query/pathParameter, responseBody 사용 예시
queryParameter와 pathParameter가 존재하며, resoponseBody가 존재하는 예시 코드입니다.
원래 코드를 간략화 해서 핵심 내용만 담아 재구성했습니다.
이 두 가지 예시면, multipart/form-data 형식이 아닌 json을 주고받는 api들은 전부 커버가 될 것입니다.
requset/respose body, path/query parameter 이렇게 네 가지 케이스가 전부 예시로 나와있기 때문입니다.
글을 읽는 분들께 도움이 되셨으면 좋겠습니다 😊



