Test case
MemberRepository repository = new MemoryMemberRepository();
@Test
public void save() {
}
MemberRepository라는 클래스의 테스트 케이스를 만든다면 이런 틀이다.
이 상태에서 run을 눌러 바로 실행할 수 있다.
package hello.hello_spring.repository;
import hello.hello_spring.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.Optional;
import static org.assertj.core.api.Assertions.*;
class MemoryMemberRepositoryTest {
MemberRepository repository = new MemoryMemberRepository();
@Test
public void save() {
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result);
}
- save라는 메서드를 만들어서 member에 spring을 세팅한다.
- repository에 member를 저장하고
- findById로 내가 넣은게 제대로 들어갔나 확인가능 (Optional에서 값을 꺼낼 때는 get()을 사용하여 꺼내기 가능) = 이것을 result라고 하자
- 검증 : assertThat().isEqualTo()
=>

Assertions.asserthat~~~~에서 Assertions를 Add on-demand~~~~를 눌러서 import(?)하게 되면
앞의 Assertions는 생략되고 그 후부터는 다 assertThaat(~)부터 쓸 수 있다.
findByName()
@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);
}
<이름으로 찾는 findByName 테스트 생성>
member를 생성하고 spring1을 셋팅 후 repository에 member1을 저장한다. (member2도 같은 맥락)
그리고 result에 spring1을 찾는 내용을 담는다.
assertThat으로 result(spring1)는 member1과 같냐는 검증 시작.
=> 실행 후 true이면 초록불이 뜨고 false라면 빨간 불이 뜬다.
@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);
}
각각 member1/2와 spring1/2를 담아주고
assertThat으로 size(총 갯수)가 2와 같냐 = 2개냐 (member1, 2 총 2개) 테스트
2가 맞으니 초록불이 뜨고, 만약 여기서 isEqualTo(3)을 적는 경우 false로 빨간 불이 뜨게 된다.
Best Test란? =
* 메서드 마다 run을 눌러 테스트하는 경우와 달리 전체를 한번에 테스트하는 경우에는 메서드 순서가 엉켜서 오류가 날 수도 있다.
= 고로 하나 테스트 하고 하나를 클리어 해주는 방식을 권장한다.
=> 테스트 클래스 내에 테스트 하나가 끝날때마다 리포지토리를 깔끔하게 지워주는 코드를 넣어준다
+++ 1. 테스트하려는 클래스의 원본에는
public void clearStore() {
store.clear();
}
저장소를 clear하는 메서드를 하나 넣어둔다.
2. 테스트 케이스 클래스에는
@AfterEach
public void afterEach() {
repository.clearStore();
}
이렇게 AfterEach를 사용하여 저장소를 clear하는 메서드를 만든다.
이렇게 클리어 코드를 작성해두면 전체 테스트 검사를 했을 시 메서드 순서가 얽혀 오류가 나는 일을 줄일 수 있다.
'Coding > Spring(Boot)' 카테고리의 다른 글
| [Spring]DI(의존성 주입)와 Bean (0) | 2024.06.10 |
|---|---|
| [Spring]회원 서비스 개발(+ test case) (0) | 2024.06.10 |
| [Spring]정적컨텐츠/MVC/API (2) | 2024.06.09 |
| [Spring]스프링부트 build 후 실행하기 (0) | 2024.06.09 |
| [Spring]스프링부트 프로젝트 설정 (0) | 2024.06.06 |