
package Portfolio.PortfolioSpring.repository;
import Portfolio.PortfolioSpring.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 org.junit.jupiter.api.Assertions;
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach //테스트의 하나의 동작이 끝날때마다 실행되는 함수를 만들때 AfterEach 어노테이션을 적용해야한다.
public void afterEach(){
repository.clearStore();
}
@Test //test는 JUnit에서 제공하는 테스트 전용 어노테이션
public void save(){
Member member = new Member();
member.setName("천영성");
repository.save(member);
Member result = repository.findById(member.getId()).get(); // repository에서 꺼낼때 get이라는 메서드를 통해 데이터를 꺼내온다.
// 옛날 방식
// Assertions.assertEquals(result , member); // Junit에서 제공하는 Assertions 클래스에 assertEquals 함수를 이용하여 두개의 객체가 일치하는지 여부플 판단할 수 있다.
//요즘 방식
Assertions.assertThat(member).isEqualTo(result); // assertThat을 이용해 멤버가 result랑 똑같은지 확인할 수 있다.
}
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("Spring");
repository.save(member1);
Member member2 = new Member();
member2.setName("Python");
repository.save(member2);
Member result = repository.findByName("Spring").get(); //findByname으로 찾고
Assertions.assertThat(result).isEqualTo(member1);
Member result2 = repository.findByName("Python").get();
Assertions.assertThat(result2).isEqualTo(member2);
}
@Test
public void findAll(){
Member member1 = new Member();
member1.setName("Spring");
repository.save(member1);
Member member2 = new Member();
member2.setName("Python");
repository.save(member2);
List<Member> result = repository.findAll();
Assertions.assertThat(result.size()).isEqualTo(2); // assertThat은 문자열뿐만 아니라 정수,파일,객체,바이트 등등 일치 여부를 확인할 수 있다.
}
}
TDD 개발방식 순서
1.테스트 작성: 먼저 개발하려는 기능 또는 모듈에 대한 테스트 케이스를 작성합니다. 이 테스트는 해당 기능이나 모듈이 어떻게 동작해야 하는지를 정의합니다. 이때, 아직 구현되지 않은 기능을 테스트하는 것이므로 테스트는 실패할 것입니다.2.코드 작성: 테스트 케이스를 작성한 후에는 해당 테스트 케이스를 통과시키기 위한 코드를 작성합니다. 이때, 최소한의 코드만을 작성하여 테스트를 통과시킬 수 있는 상태로 만듭니다.
3.리팩토링: 테스트를 통과시킨 후에는 작성한 코드를 리팩토링하여 코드의 가독성을 높이고 중복을 제거하며, 유지보수성을 향상시킵니다.