3장에 이어서 예제 요구에 대한 백엔드를 마저 구성해보겠습니다.
4장에서는 3장에서 구현한 리포지토리에 대한 테스트 케이스를 작성하고 테스트를 하는 과정까지 포스팅 하겠습니다.
공부 자료는 인프런 김영한 강사님의 스프링 입문편을 들었습니다.
https://inf.run/Jk5T
테스트
자바 스프링에서는 개발한 메소드를 테스트하는 여러가지 방법이 있습니다. 자바 main 메소드를 통해 실행하는 방법, 웹 어플리케이션 컨트롤러를 통해 실행하는 방법 등이 있습니다. 그러나 이러한 방법은 준비하고 실행하는데에 오랜 시간이 걸리며, 반복 실행하기 어렵다는 단점이 있습니다. 때문에 자바 스프링에서는 JUnit 프레임워크를 사용하여 테스트를 실행합니다.
Java 클래스에 대한 테스트 코드를 만드는데에 IntelliJ IDEA 에서 간편한 단축키를 제공합니다. cmd + shift + t 커맨드를 이용하여 테스트 코드 작성할 메소드들을 선택하면 자동으로 테스트 코드를 작성해줍니다.
3장에서 만든 MemoryMemberRepository 에 대한 Test 코드인 MemoryMemberRepositoryTest 전체 코드입니다.
package com.example.demo.repository;
import com.example.demo.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
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();
Assertions.assertThat(result).isEqualTo(member);
}
@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();
Assertions.assertThat(result).isEqualTo(member1);
}
@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();
Assertions.assertThat(result.size()).isEqualTo(2);
}
}
메소드를 테스트 할 때에는 @Test 태그를 작성하여 테스트 코드임을 알려야 합니다. MemoryMemberRepository 클래스 변수를 repository 를 하나 생성합니다. 그 후 테스트 할 메소드들을 하나씩 구현해보며 실행해 결과를 확인하면 됩니다.
우선 save 메소드 먼저 테스트 하겠습니다.
@Test
public void save() {
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
Assertions.assertThat(result).isEqualTo(member);
}
Member 클래스 member 객체 하나를 생성합니다.member 객체 name 필드 값을 spring 으로 설정한 후, repository 의 HaspMap 자료구조에 저장합니다.repository 에 member Id 와 동일한 Id 의 Member 객체를 불러와 새로운 Member 클래스 result 의 객체에 대입합니다.hamcrest 라이브러리의 메소드 중 하나인 Assertions 의 assertThat.isEqualTo 를 사용해 두 객체를 비교해 테스트합니다.앞선 repository.save 메소드가 잘 동작한다면, 두 객체가 같기 때문에 save 메소드 테스트는 성공입니다.
그 다음으로 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();
Assertions.assertThat(result).isEqualTo(member1);
}
Member 클래스 member1 객체를 생성한 후, spring1 으로 name 필드 값을 설정한 후 저장합니다.Member 클래스 member2 객체를 하나 더 생성한 후, spring2 으로 name 필드 값을 설정한 후 저장합니다.repository 에 저장되어 있는 spring1 과 같은 name 필드 값을 가진 Member 객체를 불러와 Member 클래스 result 객체에 대입합니다.findByName 메소드가 제대로 동작한다면, result 객체와 member1 객체가 같기 때문에 테스트 결과가 성공적으로 나옵니다.
그 다음으로 findByName 메소드를 테스트 하겠습니다.
@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();
Assertions.assertThat(result.size()).isEqualTo(2);
}
Member 클래스 member1 객체를 생성한 후, spring1 으로 name 필드 값을 설정한 후 저장합니다.Member 클래스 member2 객체를 하나 더 생성한 후, spring2 으로 name 필드 값을 설정한 후 저장합니다.repository 에 저장되어 있는 findAll 메소드를 통해 모든 객체들을 불러와 Member 객체 리스트 result 변수에 대입합니다.findAll 메소드가 제대로 동작한다면, result.size 값과 2가 같으므로 테스트 결과가 성공적으로 나옵니다.
이번 포스팅에서는 앞서 구현한 리포지토리에 대해서 JUnit 프레임워크를 통해 테스트 하는 방법에 대해 알아보았습니다.
다음 포스팅은 리포지토리를 활용해 실제 기능 동작과 관련된 서비스 구현에 대해 알아보겠습니다.
'개인 공부 > Spring' 카테고리의 다른 글
[Spring] #6 스프링 빈 등록 (0) | 2022.01.19 |
---|---|
[Spring] #5 회원 서비스 구현 (0) | 2022.01.19 |
[Spring] #3 회원 도메인과 리포지토리 구현 (0) | 2022.01.12 |
[Spring] #2 예제로 통한 백엔드 개발 (0) | 2022.01.12 |
[Spring] #1 스프링 웹 개발 기초 (0) | 2022.01.11 |