웹개발/Spring
[Spring] 테스트 코드는 순서대로 실행되지 않는다.
우리로
2020. 8. 4. 12:05
Member와 관련된 함수를 테스트하는 코드를 가볍게 작성해보았다.
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@Test
public void save() {
Member member = new Member();
member.setName("Spring1");
repository.save(member);
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result);
}
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("Spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("Spring2");
repository.save(member2);
Member result = repository.findByName("Spring1").get();
assertThat(result).isEqualTo(member1);
}
@Test
public void findAll(){
Member member1 = new Member();
member1.setName("Spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("Spring2");
repository.save(member2);
List<Member> result = repository.findAll();
assertThat(result.size()).isEqualTo(2);
}
}
음~ 잘 짠 것 같다. 자 이제 테스트를 돌려보자!! 내 생각엔 분명 잘 된다.

근데 에러가 떳다. findByName이 테스트를 통과하지 못했다. 코드를 아무리봐도 이상한 게 없는데???
이렇게 된 이유는 테스트가 순서대로 실행되지 않기 때문이다.
코드 순서는
save()--> findByName() --> findAll()이지만 테스트가 꼭 그 순서대로 실행되는 건 아니다. 그렇기 때문에 테스트가 끝날 때마다 초기화를 해줘야 한다. 즉, 절대 코드 순서에 의존적이도록 테스트 코드를 짜면 안 된다!!!
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach(){
repository.clear();
}
@Test
public void save() {
Member member = new Member();
member.setName("Spring1");
repository.save(member);
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result);
}
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("Spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("Spring2");
repository.save(member2);
Member result = repository.findByName("Spring2").get();
assertThat(result).isEqualTo(member1);
}
@Test
public void findAll(){
Member member1 = new Member();
member1.setName("Spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("Spring2");
repository.save(member2);
List<Member> result = repository.findAll();
assertThat(result.size()).isEqualTo(2);
}
afterEach를 통해 각 테스트가 끝날 때마다 저장소를 초기화하도록 만들어줬다. 그러면 테스트가 잘 통과될까??

Clear~