test폴더를 통해서 테스트를 해보자.
파일 경로: test/java/만든 파일명/repository/MemoryMemberRepositoryTest
[MemoryMemberRepositoryTest.java]
package section4.section4_spring.repository;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import section4.section4_spring.domain.Member;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
// 한개의 테스트가 끝날 때마다 데이터 혼란을 방지하기 위해 레포지토리를 지워주는 코드
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(); //get()을 하는 이유는 Optional에 담겨 있기 때문이다.
System.out.println("result:" + (result == member));
//위 처럼 출력결과를 보면서 테스트하기에는 비효율적이기 때문에 아래의 방법들을 사용
Assertions.assertEquals(member, result);
// 만약에 값이 true라면 녹색불 false라면 빨간불이 들어온다.
assertThat(member).isEqualTo(result);
// 위의 import static org.assertj.core.api.Assertions.*; 해당 코드를 사용해야한다. (요즘 많이 사용하는 테스트 방법)
}
@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(member1).isEqualTo(result);
}
@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);
}
}
❓@Test를 사용하는 이유: 이 메서드가 테스트 코드임을 표시하기 위해 사용된다., 즉 테스트할 코드를 자동으로 실행하도록 해주는 마커라고 생각하면된다.
테스트 하나 씩 알아보자.
@Test
public void save(){
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get(); //get()을 하는 이유는 Optional에 담겨 있기 때문이다.
System.out.println("result:" + (result == member));
//위 처럼 출력결과를 보면서 테스트하기에는 비효율적이기 때문에 아래의 방법들을 사용
Assertions.assertEquals(member, result);
// 만약에 값이 true라면 녹색불 false라면 빨간불이 들어온다.
assertThat(member).isEqualTo(result);
// 위의 import static org.assertj.core.api.Assertions.*; 해당 코드를 사용해야한다. (요즘 많이 사용하는 테스트 방법)
}
[작동 방식]
1. 멤버 객체를 만들고 회원을 임의로 입력해준다.
2. 해당 객체를 save 메소드로 저장소에 저장한다.
3. 만든 객체와 저장된 회원이 동일한지 확인한다.
테스트에는 총 3가지 방식이 있다.
System.out.println("result:" + (result == member));
-> 해당 방식은 바로 텍스트로 살펴볼 수 있어 확실하지만 일일히 텍스트로 확인하기 쉽지 않다는 단점이 있다.
Assertions.assertEquals(member, result);
-> 해당 방식은 간단하고 직관적이지만 복잡한 비교나 추가 조건을 작성하기 어렵다는 단점이 있다.
import static org.assertj.core.api.Assertions.*;
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(member1).isEqualTo(result);
}
[작동 방식]
1. 2개의 멤버 객체를 만들고 각각 다른 이름의 회원을 입력해준다.
2. 특정 이름으로 findByname을 통해 저장소에 해당 회원의 정보를 가져온다.
3. 특정 이름으로 된 객체의 정보와 회원의 정보를 비교해본다.
@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);
}
[작동 방식]
1. 2개의 멤버 객체를 만들고 각각 다른 이름의 회원을 입력해준다.
2. 리스트에 저장소에 찾은 모든 데이터를 저장한다.
3. 만든 객체의 개수인 2와 리스트의 사이즈를 비교해본다.
'Server > Spring' 카테고리의 다른 글
회원관리 - 백엔드 개발) 4. 회원 서비스 테스트하기 (0) | 2024.08.25 |
---|---|
회원관리 - 백엔드 개발) 3. 회원 서비스 개발하기 (0) | 2024.08.24 |
회원관리 - 백엔드 개발) 1. 회원 도메인과 Repository 만들기 (0) | 2024.08.24 |
JSON 데이터를 직접 반환하여, 템플릿을 거치지 않고 API 응답을 처리하기(API 활용하여 개체 JSON으로 반환하기) (0) | 2024.08.24 |
HTML 페이지 렌더링 시 요청받은 데이터 포함하기(매개변수를 MVC패턴으로 전달해 렌더링하기) (0) | 2024.08.24 |