Given When Then
Dan North 와 Chris Matts가 Behavior-Driven Development (BDD)의 일환으로 개발 한 접근 방식입니다 .
필수 아이디어는 세 가지 섹션으로 시나리오 (또는 테스트)를 작성하는 것입니다.
1 2 3 4 5 6 7 8 9 10 11
| Given-When-Then 공식은 User Story에 대한 수락 테스트 의 작성을 안내하기위한 템플릿입니다 .
(Given) 약간의 문맥 (When) 어떤 행동이 수행된다. (Then) 관찰 가능한 결과의 특정 세트가 얻어야한다.
예 : (Given) 내 은행 계좌에 크레딧이 있고 최근에 인출을하지 않았다면, (When) 카드의 한도액보다 적은 금액을 인출하려고하면, (Then) 그런 다음 철회가 오류나 경고없이 완료되어야합니다.
|
코드로 풀어보면 아래처럼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| package com.github.sejoung.repositories;
import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.is;
import com.github.sejoung.domain.DomainTest; import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class) @DataJpaTest @Slf4j public class TestRepositoryDomainDomainTest {
@Resource private DomainTestRepository repository;
@Resource private TestEntityManager testEntityManager;
@Test public void 조회테스트() {
var dt = DomainTest.builder().title("test").build(); testEntityManager.persistAndFlush(dt);
var saveDt = repository.findById(dt.getId()).orElseThrow();
assertThat(saveDt.getTitle()).as("타이틀이 저장된 값과 조회된 값이 같아야 된다.").isEqualTo("test"); assertThat(saveDt.getId()).as("id가 있어야 된다.").isNotNull(); assertThat(saveDt.getCreateDateTime().toLocalDate()).as("저장된 생성일자와 조회된 생성일자가 같아야 된다.") .isEqualTo(dt.getCreateDateTime().toLocalDate());
Assert.assertThat("타이틀이 저장된 값과 조회된 값이 같아야 된다.",saveDt.getTitle(), is("test")); }
}
|
위에 코드를 보면 hamcrest와 assertj를 썩어 써보았다.
제쪽엔 더 장점을 느끼는게 assertj가 코드 어시스턴트의 도움을 받을수 있어서 더 편한것 같다.
참조