DCI 패턴이란?
DCI 패턴이란 Describe Context It 의 약자로 일종의 테스트 코드 작성 패턴이다.
Given When Then 과 비슷하지만 미묘한 차이점이 존재한다.
Describe설명할 테스트 대상을 명시한다.- e.g. 테스트 대상의 클래스, 메서드명
Context테스트 대상이 놓인 상황을 설명한다.- e.g. 테스트 대상 메서드의 파라미터
It테스트 대상의 행동을 설명한다.- e.g. 테스트 대상 메서드의 반환값
DCI 패턴의 장점
- 테스트 코드를 계층 구조로 만들어 준다.
- 테스트 코드를 추가하거나 읽을 때 범위만 신경쓰면 된다.
- 작성하지 못한 테스트 코드를 찾기 쉽다.
JUnit5 @Nested 활용
@Nested
class changeSlackUrl_메소드는 {
@Nested
class 존재하는_Job을_입력_받는_경우 {
private static final String SLACK_URL = "http://slackurl.com";
private static final String NEW_SLACK_URL = "https://newslackurl.com";
private final Host host = repository.save(Host_생성("1234", 1234L));
private final Space space = repository.save(Space_생성(host, "잠실"));
private final Job job = repository.save(Job_생성(space, "톱오브스윙방", SLACK_URL));
private final SlackUrlChangeRequest request = new SlackUrlChangeRequest(NEW_SLACK_URL);
@Test
void Slack_Url을_수정한다() {
jobService.changeSlackUrl(host.getId(), job.getId(), request);
Job actual = repository.getById(Job.class, job.getId());
assertThat(actual.getSlackUrl()).isEqualTo(NEW_SLACK_URL);
}
}
}JUnit5 의 @Nested 를 활용해 Java 에서도 이런 계층형 테스트 코드를 작성할 수 있다.

계층형으로 테스트 코드를 작성하게 된다면 위처럼 테스트 대상 메서드를 쉽게 찾을 수 있다.
이는 누락된 테스트를 찾거나 새로운 테스트를 추가할 때 상당히 편하다.

테스트를 실행할 때도 실패하는 케이스등을 찾을 때 훨씬 수월하게 찾을 수 있다.