본문 바로가기

서버/TDD

[TDD 공부-java] 4) 테스트 코드 작성 개선사항

1.  @BeforeEach와 @AfterEach 사용하기 

모든 테스트는 순서가 보장 되지 않기 때문에 순서에 의존적으로 설계하면 절대 안된다. 예를 들어 이전 회원가입 테스트 메소드 내에서 생성한 사용자 정보를, 이후 로그인 테스트에서 사용하면 안된다.(로그인 테스트가 먼저 실행될 수도 있기 때문) 따라서 각 테스트 이후 혹은 이적에 진행해야할 것들을 @BeforeEach와 @AfterEach로 지정해준다. 

@BeforeEach
public void beforeEach() {
    memberRepository = new MemoryMemberRepository();
    memberService = new MemberService(memberRepository);
}
@AfterEach
public void afterEach() {
	memberRepository.clearStore();
}

2. 테스트 메소드 내부 로직

테스트 메소드 내부 코드를 작성할 땐 아래의 순서를 따르는 것을 추천한다.

  1. given : A가 주어짐
  2. when : A로 ~를 실행했을 때
  3. then : ~같은 결과가 나와야 함
@Test
void join() {
    // given
    Member member = new Member();
    member.setName("hello");

    // when
    Long saveId = memberService.join(member);

    // then
    Member findMember = memberService.findOne(saveId).get();
    assertThat(member.getName()).isEqualTo(findMember.getName());
}

+ 테스트는 정상 플로우보다 예외 상황이 훨씬 중요하다. -> 예외가 잘 발생하는지를 꼭 테스트해야 한다. 

3. assertThat

assertThat은 assertEquals보다 더 직관적으로 사용할 수 있다.

import static org.assertj.core.api.Assertions.assertThat;
...
assertThat(member.getName()).isEqualTo(findMember.getName());

 

 

아래 링크에서 위 내용을 구현한 예제를 볼 수 있다.

https://github.com/Hyun-juhee/Spring-Study/blob/main/user-management/src/test/java/com/example/usermanagement/service/MemberServiceTest.java

 

Hyun-juhee/Spring-Study

Spring-boot를 학습하면서 정리하는 repository. Contribute to Hyun-juhee/Spring-Study development by creating an account on GitHub.

github.com

 

반응형