Junit5 그리고 Describe - Context - It 패턴
BDD 테스트 코드작성하는 방법도 해보았었지만, 결국에는 일반 Junit의 단위테스트로 작성을 해왔었다.
그런데 스터디를 통해서 DCI 패턴이라는 것을 알게 되었고, Junit5에서 @Nested를 사용하여 계층 구조 형태로 작성할 수 있다는 내용을 알게되었다.
구분
설명
Describe
설명할 테스트 대상을 명시하는 역할.
Context
테스트 대상이 특정 상황에 놓은 경우를 명시한다.
- 영어로 Context문을 작성할 때에는 반드시 with 또는 when으로 시작하도록 한다.
It
테스트 대상의 행동을 설명한다.
- It returns true, It responds 404와 같이 심플하게 설명할수록 좋다.
출처 : https://johngrib.github.io/wiki/junit5-nested/
Describe, Context, It을 이해하기 쉽게 작성하는 것이 포인트 같다.
 실행 결과 예시
intellij 에서 테스트 구동이 gradle로 잡혀 있으면 위와 같은 실행 결과가 나타나지 않는다. Test 동작 위치를 Intellij로 셋팅 해줘야 위와 같이 보인다.

테스트 코드 예시
@DisplayName("주문 조회 테스트") @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class OrderServiceTest { @DisplayName("주문번호 0001일 때 조회하면") @Nested @SpringBootTest public class test1 { @Autowired OrderService orderService; @Before public void init() { Order order = new Order(new OrderNo(String.format("0001"))); orderService.create(order); } @Test @DisplayName("성공한다.") void success1() { OrderNo orderNo = new OrderNo("0001"); Optional order = orderService.findByOrderNo(orderNo); order.ifPresent(o -> { assertThat(orderNo.getNumber(), is(o.getNumber())); }); } } @DisplayName("신규 주문을 등록하면") @Nested @SpringBootTest class test2 { @Autowired OrderService orderService; @Before public void init() { } @Test @DisplayName("등록된다.") void success2() { Order order = new Order(new OrderNo("0002")); Order order1 = orderService.create(order); assertThat(order.getNumber(), is(order1.getNumber())); } } } 클래스 내부에 클래스를 작성해서 계층 형태로 하다보니, Spring test 같은 경우에는 계층 클래스 마다 선언을 해줘야 의존성이 주입되고 동작하는 것을 확인했다.
스프링 테스트에 더 효율적인 방법이 있는지는 추가로 확인이 필요하다.
This article is licensed under CC BY 4.0 by the author.