GivenWhenThen

3 min read

Given When Then

Dan North 와 Chris Matts가 Behavior-Driven Development (BDD)의 일환으로 개발 한 접근 방식입니다 .

필수 아이디어는 세 가지 섹션으로 시나리오 (또는 테스트)를 작성하는 것입니다.

Given-When-Then 공식은 User Story에 대한 수락 테스트 의 작성을 안내하기위한 템플릿입니다 .

(Given) 약간의 문맥
(When) 어떤 행동이 수행된다.
(Then) 관찰 가능한 결과의 특정 세트가 얻어야한다.

예 :
(Given) 내 은행 계좌에 크레딧이 있고 최근에 인출을하지 않았다면,
(When) 카드의 한도액보다 적은 금액을 인출하려고하면,
(Then) 그런 다음 철회가 오류나 경고없이 완료되어야합니다.

코드로 풀어보면 아래처럼


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 // the test slice
@Slf4j
public class TestRepositoryDomainDomainTest {

  @Resource
  private DomainTestRepository repository;

  @Resource
  private TestEntityManager testEntityManager;

  @Test
  public void 조회테스트() {

    // given
    var dt = DomainTest.builder().title("test").build();
    testEntityManager.persistAndFlush(dt);

    //when
    var saveDt = repository.findById(dt.getId()).orElseThrow();

    //then
    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가 코드 어시스턴트의 도움을 받을수 있어서 더 편한것 같다.

참조