일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바 최대공약수
- ineer join
- toLowerCase()
- 스프링
- isuppercase()
- string
- stringbuilder의 reverse()
- 스프링환경설정
- string과 stringbuilder
- 최대공약수와 최소공배수
- 자바 유클리드
- 래퍼타입
- StringBuilder
- replaceAll()
- 모던자바
- git 컨벤션
- 최대공약수
- Git사용법
- while과 two-pointer
- 자바 최소공배수
- islowercase()
- 최소공배수
- 동일성과 동등성
- 스프링뼈대
- 유클리드호제법
- 베주계수
- addDoc
- 프로그래머스 레벨1
- sql 데이터형 변환
- 자바 스트링
- Today
- Total
주노 님의 블로그
[Spring] 4. 회원관리 예제 (테스트케이스 작성법) 본문
시작하기에 앞서
아래 내용은 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근기술에서 발췌한 내용입니다.
강의자료 일부를 발췌하는건 괜찮다고 하셨다.
무료강의로 지식을 공유해주신 김영한님께 다시한번 감사의 인사를 올리겠습니다
(_ _) (유료도 샀어요!)
내가짠 리포지토리가 잘 되는지 확인하고싶을때
1. 메인 메서드를 실행한다 >> 너무 오래걸림
2. 테스트 케이스를 실행한다
package springProject.hello_spring.member_management.repository;
import springProject.hello_spring.member_management.domain.Member;
import java.util.*;
public class MemoryMemberRepository implements MemberRepository {
//저장받을 맵 생성
private static Map<Long, Member> store = new HashMap<>();
//키값을 올려줄 변수생성
private static long sequence = 0L;
@Override
public Member save(Member member)
{
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
//store에서 하나하나 꺼내라.
// return store.get(id);
//없으면 어떻게>>? optional로 감싸자
return Optional.ofNullable((store.get(id)));
}
@Override
public Optional<Member> findByName(String name) {
//store에서, member에서 위 파라미터에서 넘어온 name과 같다면 반환한다.
//findAny는 하나만 찾는것 있다? 뒤를 조사 안하고 나오기..
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
@Override
public List<Member> findAll() {
//store에 있는 member들을 모두 꺼낸다.
return new ArrayList<>(store.values());
}
}
위 코드를 테스트해보자
test안의 내가 테스트할 클래스와 동일하게 패키지를 생성하고
Memory클래스이름Test로 작성한다. (관례)
assertEquals는
결과는 출력되지 않지만
체크표시로 성공을 나타낸다
필요한건 저건데 실제로 저장된값은 이거다 라는 오류를 뱉는다.
import org.assertj.core.api.Assertions;
assertThat(member).isEqualTo(result);
위와 같지만 가독성이 좋음
assertEquals는 import org.junit.jupiter.api.Assertions; 로 불러오고
assertThat는 import org.assertj.core.api.Assertions;
세이브 메서드 테스트 코드와
findByName테스트코드
클래스 레벨에서 실행할경우
둘다 테스트 할 수 있다
다만
하나를 실행할때는 문제가 없었지만
모두 테스트를 하면 갑자기 오류가 생기는 것을 볼 수 있다
테스트 순서는 정해지지 않으며,
findAll에서 member1과 member2가 먼저 선언되어 생기는 문제였다
해결법 >>
테스트 패키지가 아닌
우리가 개발한 레파지토리로 가자
테스트용으로 클리어 메서드를 생성한다
그리고 테스트로 돌아와서
AfterEach 어노테이션을 사용한다
하나의 테스트가 끝나면 자동으로 이 메서드가 실행되어 저장소를 초기화해준다.
문제해결!
'공부 > Spring' 카테고리의 다른 글
[Spring] 6.웹 기능을 위한 프론트엔드 구성 (0) | 2024.07.28 |
---|---|
[Spirng] 5. 스프링 빈과 의존관계 설정 (0) | 2024.07.28 |
[Spring] 4. 회원관리 예제 (비즈니스 요구사항 정리) (0) | 2024.07.28 |
[Spring] 3. 서버가 클라이언트에게 페이지를 전달하는 방식 (API) (0) | 2024.07.27 |
[Spring] 3. 서버가 클라이언트에게 페이지를 전달하는 방식 (MVC와 템플릿 엔진) (0) | 2024.07.27 |