f-lab-edu / ticket-seller

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Mock Stubbing 이용한 테스트 구현 시 동일 메서드에 대해 조건부 처리 방법

jaejeong1 opened this issue · comments

아래의 join 메서드를 Mock Stubbing 이용해 테스트 하려합니다.

image

해당 메서드에 대한 테스트 코드는 아래와 같이 작성하였습니다.
image

현재 테스트 코드는 기존 저장된 Member가 있는지 확인하는 것이 아닌 단순히 호출 순서에 따른 리턴값 또는 익셉션을 던지고 있습니다.

이에 필요한 중복 검사 메서드(validateDuplicateMember)는 현재 private으로 선언되어 있으나, 테스트만을 위해 public으로 선언하는 것은 좋은 방법으로 생각되지 않습니다.

위 문제를 효율적으로 해결할 방법이 있을까요?

말씀대로 private 메소드는 바깥에서 보이지 않기때문에 쉽게 테스트하기 어렵습니다.
다만, 최소 하나의 특정 메서드에서는 호출해서 사용하고 있을것이므로 그 메소드를 테스트할 때 겸사겸사 같이하면 됩니다.

위 JOIN 메소드를 제가 테스트한다면 아래를 검증해볼 것 같네요.

  1. 파라미터 member를 member.Repository.findByName에 제대로 전달하고 있는지.
  2. findMembers.isEmtpry()가 false일 때 IllegalStateException이 발생하는지.
  3. findMembers.isEmtpry()가 true일 때 예외가 발생하지 않는지
  4. memberRepository.save() 가 1번 호출되는지.
  5. join의 메소드의 응답이 member.getId()를 호출한 결과인지.

등등이요~

위 내용을 보시면 private 함수가 하는 일까지 포함해서 테스트하는걸 보실 수 있으실거에요.

= 테스트의 대상은 public 메소드라고 생각해주셔도 저는 괜찮다 생각합니다~