
테스트 코드 도입
|
JUnit |
Spock |
선택 |
언어 및 구문 |
순수 자바로 작성되었으며, 테스트 케이스를 작성할 때 Java 언어를 사용합니다. JUnit 5부터는 Java 8 이상의 버전을 지원합니다. |
그루비 기반으로 작성되었으며, 테스트 코드는 그루비 문법을 사용합니다. Groovy는 Java와 호환되어 자바 라이브러리와 함께 사용할 수 있습니다. |
JUnit |
테스트 코드의 가독성 |
테스트 코드는 일반적으로 Java의 표준 구문을 따르며, 상대적으로 코드가 길어질 수 있습니다. |
그루비의 간결한 문법과 표현력을 활용하여 테스트 코드를 더 간결하고 가독성 있게 작성할 수 있습니다. |
Spock |
테스트 구조 |
테스트 클래스 내에 @Test 어노테이션이 지정된 메서드로 테스트를 정의합니다. |
특별한 테스트 스펙(Spec) 클래스를 사용하며, 각 테스트는 def 키워드로 시작하고 expect, when, then 섹션으로 구분됩니다. |
Spock |
테스트 어설션 및 기능 |
주로 assertEquals, assertTrue와 같은 메서드를 사용하여 어설션을 수행합니다. |
Groovy의 강력한 언어 기능을 활용하여 assert 키워드를 사용하거나, expect 섹션에서 조건을 명시하고 자동으로 어설션을 생성할 수 있습니다. |
Spock |
테스트 더미 및 목(Mock) 객체 생성 |
Mockito 또는 다른 라이브러리를 사용하여 목 객체를 생성하고 테스트 더미를 구현합니다. |
내장된 Mocking 및 Stubbing 기능을 활용하여 간편하게 목 객체를 생성하고 테스트 더미를 사용합니다. |
Spock |
Groovy의 간결한 문법과 Spock의 섹션, 손쉽게 만드는 목 객체와 스텁으로 채택하였음
테스트 코드 현황
Spock 테스트 코드 예시
class StageServiceTest extends Specification {
StageService service
StageRepository stageRepository = Mock(StageRepository)
def setup() {
service = new StageService(stageRepository)
}
def "공연장 주소 검색"() {
given:
def stageRequestDto = Mock(StageRequestDto)
stageRepository.findByAddressContaining(stageRequestDto.getAddress()) >> _stageList
when:
def address = service.getStageListByAddress(stageRequestDto)
then:
def empty = CollectionUtils.isEmpty(address)
empty == false
where:
_stageList | _result
Arrays.asList(Mock(Stage)) | true
}
}