테스트 코드의 중요성
테스트 코드는 기능에 대한 불확실성을 감소시킬 수 있으며, 기존에 개발된 기능을 안전하게 보호해준다.
ex : A 기능 개발 했는데, B 기능 문제 발생하는 경우
테스트 코드 작성은 개발 단계 초기에 문제 발견에 도움을 주기 때문에, 개발 시간을 단축!
ex : 충분한 테스트 코드 없이 빠르게 배포하면 배포 후 문제가 발견되기 때문에
+ 다른 부분에서 찾은 내용
1. 개발 과정에서 문제를 미리 발견할 수 있다.
2. 기능 추가와 리팩토링을 안심하고 할 수 있다.
3. 빠른 시간 내 코드의 동작 방싱과 결과를 확인할 수 있다.
4. 좋은 테스트 코드를 작성하려 하다보면, 자연스럽게 좋은 코드가 만들어 진다.
5. 잘 작성한 테스트는 문서 역할을 한다. (코드리뷰를 돕는다.)
Spock 프레임워크란?
Spock란 Groovy 언어를 이용하여 테스트 코드를 작성할 수 있는 프레임워크이며 JUnit과 비교하여 코드를 더 간결하게 작성 가능
Groovy 언어는 동적 타입 프로그래밍 언어로 JVM 위에서 동작하며 Java 문법과 유사
테스트 메소드 이름을 문자열로 작성할 수 있으며 given, when, then 코드 블록을 명확히 구분
Junit의 경우 주석으로 블록을 구분했었고, 메소드 이름 또한 제약사항이 많이 존재
import spock.lang.Specification
import java.nio.charset.StandardCharsets
class KakaoUriBuilderServiceTest extends Specification {
private KakaoUriBuilderService kakaoUriBuilderService;
def setup(){
kakaoUriBuilderService = new KakaoUriBuilderService();
}
def "buildUriByAddressSearch - 한글 파라미터의 경우 정상적으로 인코딩"(){
given:
String address = "서울 성북구"
def charset = StandardCharsets.UTF_8
when:
def uri = kakaoUriBuilderService.buildUriByAddressSearch(address);
def decodeResult = URLDecoder.decode(uri.toString(), charset)
then:
println uri
decodeResult == "https://dapi.kakao.com/v2/local/search/address.json?query=서울 성북구"
}
}
위는 유닛 테스트
스프링 컨테이너를 띄어 놓고 전체 통합 테스트(여러 bean들 간에 의존성주입을 통해 여러 모듈간의 연동까지 검증하는 테스트)
댓글