인생을 코딩하다.

[Spring] ArgumentMatcher<T> (단위테스트 할 때) 본문

Spring

[Spring] ArgumentMatcher<T> (단위테스트 할 때)

Hyung1 2020. 10. 21. 10:53
728x90
반응형

Mockito를 활용해 단위테스트를 진행할 떄

 

PersonService.java
PersonServiceTest.java

PersonService.java에서 person.set(personDto) 로직을 주석처리 하였는데도 TestCode가 작동을 한다.

중요 로직을 주석처리 하였는데 오류를 검출하지 못한채로 검증을 해버리게 된다.

이유는 PersonServiceTest.java에서

verify(personRepository, times(1)).save(any(Person.class));

어떠한 로직이든 person class면 괜찮다고 생각하기 때문이다.

set을 주석처리 하여서 personDto가 들어가지 못하기 때문에 값은 다 null이 들어가지만,

밑에서 save가 되기 때문에 통과 되어버린다. 그래서 오류 검출을 하지 못하게 된다.

 

이 문제를 해결하기 위해 ArgumentMatcher<T>을 이용하여 테스트 코드를 만들었다.

PersonServiceTest.java 수정

ArgumentMatcher을 상속받고 matches로 매칭한다.

verify(personRepository, times(1)).save((argThat(new IsPersonWillBeUpdated())));

save할 때, IsPersonWillBeupdated의 조건들을 다 검사하고 save한다.

 

현재 PersonService.java에서 set이 주석처리 되어있기 때문에

save할때 null값들이 들어가게된다.

그래서 위와 같이 콘솔창에서 null값들이 들어가는 오류들을 확인 할 수 있게 된다.

 

이렇게 하면 좋은점이

Person.java

 

우리가 set할때 값들의 변경이 일어나면 오류를 검출 할 수 있게 된다.

person.java에서 phoneNumber을 주석처리 하였을때 PhoneNumber = null로 오류를 확인 할 수 있게 된다

 

728x90
반응형
Comments