개발한 기능을 테스트할 때 자바의 main메서드를 실행하거나, 웹 애플리케이션의 컨트롤러를 통해 해당 기능을 테스트해볼 수 있다. 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다. 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다.
src/test/java
하위 폴더에 생성
하나의 테스트가 끝날 때마다, store 의 내용을 clear 해주어야 한다. 그래야지 순서에 종속되지 않게 테스트를 진행할 수 있다.
package com.hello.hellospring.repository;
import com.hello.hellospring.domain.Member;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.List;
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
// 하나의 테스트가 끝날 때마다, repository 를 깔끔하게 지워주는 로직을 넣어야함
@AfterEach
public void afterEach(){
repository.clearStore();
}
@Test
public void save(){
Member member = new Member();
member.setName("서연이");
repository.save(member);
Member result = repository.findById(member.getId()).get();
Assertions.assertEquals(member, result);
}
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("장서연");
repository.save(member1);
Member member2 = new Member();
member2.setName("장문채");
repository.save(member2);
Member result = repository.findByName("장문채").get();
Assertions.assertEquals(member2, result);
}
@Test
public void findAll(){
Member member1 = new Member();
member1.setName("연폰");
repository.save(member1);
Member member2 = new Member();
member2.setName("리밍");
repository.save(member2);
List<Member> result = repository.findAll();
Assertions.assertEquals(result.size(), 2);
}
}