You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
privatestaticMap<Long, Member> store = newHashMap<>();
privatestaticlongsequence = 0L;
아직 데이터 저장소가 정해지지 않아 구현체로 메모리 기반의 데이터 저장소로 HashMap 을 static 변수로 사용한다. HashMap은 동시성 문제가 고려되어 있지 않아 실무에서는 지양하고 ConcurrentHashMap 을 사용한다. id 값을 부여하기 위해 시퀀스를 Long 타입의 static 변수로 선언하였고 이 역시 실무에서는 동시성 문제로 AtomicLong 사용을 고려한다.
회원 리포지토리 테스트
구현한 회원 리포지토리를 테스트 해보기 위해 테스트 케이스를 작성해야 한다.
// given
// when
// then
위 패턴을 기억하고 이에 맞춰 테스트 케이스를 작성하면 수월하다. (모든 경우에 given/when/then 패턴을 적용하기는 쉽지 않음)
테스트 케이스를 작성하고 각각 실행하면 성공적이지만 class 단위로 전체 실행을 하면 오류가 발생하는 경우가 있다. 이 예제의 경우엔 static 변수로 하나의 저장소를 공유하고 있기 때문이다. 각각의 테스트 케이스는 의존 관계 없이 독립적이어야 하며, 돌아가는 순서가 관계 없어야 한다.
이를 위해 store에 대한 clear() 메소드를 작성해주고 매 케이스 실행 후 돌아가게끔 해준다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
비즈니스 요구사항
만들어볼 예제는 회원 관리 시스템이기 때문에
회원을 중심으로도메인이 이루어지며 이를 관리하는리포지토리를 설계한다. 아직 데이터 저장소가 선정되지 않았다는 가정 하에리포지토리는 인터페이스로 구현 클래스를 변경할 수 있도록 설계한다.회원 도메인과 리포지토리 만들기
요구사항에 따르면 필요한 데이터는
회원ID와이름이다. 이를 바탕으로 도메인을 설계한다.도메인
리포지토리
구현 클래스를 간단하게 정리해보면
아직 데이터 저장소가 정해지지 않아 구현체로 메모리 기반의 데이터 저장소로
HashMap을 static 변수로 사용한다.HashMap은 동시성 문제가 고려되어 있지 않아 실무에서는 지양하고ConcurrentHashMap을 사용한다. id 값을 부여하기 위해 시퀀스를Long타입의 static 변수로 선언하였고 이 역시 실무에서는 동시성 문제로AtomicLong사용을 고려한다.회원 리포지토리 테스트
구현한 회원 리포지토리를 테스트 해보기 위해 테스트 케이스를 작성해야 한다.
위 패턴을 기억하고 이에 맞춰 테스트 케이스를 작성하면 수월하다. (모든 경우에 given/when/then 패턴을 적용하기는 쉽지 않음)
테스트 케이스를 작성하고 각각 실행하면 성공적이지만 class 단위로 전체 실행을 하면 오류가 발생하는 경우가 있다. 이 예제의 경우엔 static 변수로 하나의 저장소를 공유하고 있기 때문이다. 각각의 테스트 케이스는 의존 관계 없이 독립적이어야 하며, 돌아가는 순서가 관계 없어야 한다.
이를 위해
store에 대한clear()메소드를 작성해주고 매 케이스 실행 후 돌아가게끔 해준다.MemoryMemberRepository에 메소드 작성
매 테스트 케이스 실행 후 저장소 비워주기
@AfterEach어노테이션을 사용해 각각의 테스트 메서드들이 독립적으로 실행될 수 있게 할 수 있다. 이 외에도@BeforeEach를 활용할 수 있다.회원 서비스 개발
MemberService클래스를 생성해주고 이는MemberRepository를 의존하고 있다.validate메소드 같은 경우엔 따로 메소드로 추출해 관리해주는 게 좋다.💡tip 메소드로 추출할 부분을 드래그해서
cmd + option + m단축키 실행하면 메소드명만 지정해주면 알아서 생성해준다. 리팩토링 할 때 유용하게 사용할 수 있음!회원 서비스 테스트
테스트 케이스를 작성할 때는 해당 메소드가 정상 작동되는지 확인하는 것도 중요하지만 예외가 발생하는지 테스트 해보는 것도 중요하다.
Beta Was this translation helpful? Give feedback.
All reactions