일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 구현
- CleanCode
- 알고리즘
- DFS
- front-end
- Kotlin
- 검색트리
- codecademy
- 순환
- Color
- java
- CSS
- SWEA
- 코딩테스트
- 해슁
- 자바
- 다이나믹 프로그래밍
- algorithm
- html
- inflearn
- android
- javascript
- 클린코드
- DP
- Web
- BFS
- 정렬
- Spring
- SQL
- 프로그래머스
- Today
- Total
깡뇽
[Spring] 스프링 입문 - 회원 관리 예제(2) 본문
인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의를 수강하면서 정리하는 글.
회원 리포지토리 테스트 케이스
자바의 main 메서드나 웹 애플리케이션의 컨트롤러를 사용해서 테스트를 하는 방법은 오래 걸리는 등의 단점이 있다. 자바의 JUnit 프레임워크로 테스트를 실행해볼 수 있다.
회원 리포지토리 메모리 구현체 테스트
1. save 테스트
src폴더 -> test폴더 -> java 폴더 -> hello.hellospring패키지 -> "repository" Package 생성 -> "MemoryMemberRepositoryTest" Class 생성 (public 아니어도 됨) 후 코드 작성
repository에서 findById하는데 Optional이므로 get()으로 가져올 수 있음
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();
System.out.println("result = " + (result == member));
}
Test 어노테이션을 사용할 때에 junit을 확인할 수 있다.
저장한 값과 저장소에서 다시 꺼낸 값이 일치하면 잘 저장되었다고 볼 수 있다.
result가 true로 나오는 것을 확인할 수 있다.
- Assertions(junit) 사용
case1) Assertions.assertEquals(member,result); 코드 -> 정상적으로 작동
case2) Assertions.assertEquals(member, null); 코드 -> 오류 발생
- Assertions(assertj) 사용
최근 junit보다 많이 사용
case1) Assertions.assertThat(member).isEqualTo(result); 코드 -> 정상 작동
static으로 축약해서 사용할 수 있다.
case2) assertThat(member).isEqualTo(null); 코드 -> 오류 발생
2. findByName 테스트
코드 작성
+) 팁 : shift + F6 으로 복붙한 변수들 쉽게 Rename 가능
@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); // 정상 작동 -> member2를 넣으면 오류 발생
}
3. findAll 테스트
코드 작성
@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); // 정상 작동 -> 3 오류 발생
}
4. 전체 클래스 테스트
findByName의 오류 발생!
메서드마다 따로 동작하도록, 순서와 의존관계가 없도록 설계해야 하는데 이 코드에서는 findAll이 먼저 실행되면서 spring1과 spring2가 이미 저장되어 있는 상태이기 때문에 오류가 나는 것이다.
즉, 이를 해결하기 위해서는 테스트 후에 데이터를 삭제해줘야 한다.
해결 단계1. afterEach 메서드 코드 작성
+ 테스트코드 안에 MemberRepository를 MemoryMemberRepository로 변경
afterEach 메서드는 다른 메서드가 끝날 때마다 실행되는 일종의 콜백 메소드이다.
해결 단계2. MemoryMemberRepository 클래스 -> clearStore 메서드 코드 작성
이제는 실행해도 오류가 나오지 않는다.
'Web > Spring' 카테고리의 다른 글
Database 개발 환경 설정 - 윈도우 MySQL 설치 (0) | 2023.07.04 |
---|---|
Java 개발 환경 설정 - 윈도우 Open JDK 설치 (0) | 2023.07.04 |
[Spring] 스프링 입문 - 회원 관리 예제(1) (0) | 2022.02.17 |
[Spring] 스프링 입문 - 스프링 웹 개발 기초 (0) | 2022.02.16 |
[Spring] 스프링 입문 - 프로젝트 환경설정(2) (0) | 2021.12.23 |