기능을 테스트할 때 main 메서드를 실행하거나 컨트롤러를 통해 해당 기능을 실행한다.
이러한 방법은 준비, 실행 시간이 오래걸리고 반복 실행이 어렵다.
그래서 자바는 JUnit이라는 프레임워크로 테스트를 하여 이러한 문제를 해결한다.
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach(){
repository.clearStore();
}
@Test
public void save(){
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
// System.out.println(result == member);
// Assertions.assertEquals(member, result);
assertThat(member).isEqualTo(result);
}
@Test
public void findByName() {
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member result = repository.findByName("spring1").get();
assertThat(member1).isEqualTo(result);
}
@Test
public void findAll(){
Member member1 = new Member();
member1.setName("spring2");
repository.save(member1);
List<Member> result = repository.findAll();
assertThat(result.size()).isEqualTo(1);
}
}
JUnit Annotation
@Disable : 테스트에 확실히 pass되는 경우가 아닐떄 실해되지 않도록 처리하는 부분
@BeforAll, @AfterAll : 존재하는 모든 메소드를 실행한다고 할때 메소드 시작전 이나 끝난 후에 실행되는 부분
@BeforeEach, @AfterEach : 각각의 Test메소드가 실행될 떄 호출된느 메소드.
각각의 메소드가 실행 전, 실행 후에 호출되 처리되는 부분.