verify(검증) 메소드를 이용하여 특정 메소드가 실행이 됐는지, 몇번 실행됐는지, 실행이 안됐는지 등 검증을 해볼 수 있다.
verify 예제
@Test
public void pratice(){
StudyService studyService = new StudyService(memberService, studyRepository);
assertNotNull(studyService);
Study study = new Study(10, "test");
Member member = new Member();
member.setId(1L);
member.setEmail("eunjia190@gmail.com");
when(memberService.findById(1L)).thenReturn(Optional.of(member));
when(studyRepository.save(study)).thenReturn(study);
studyService.createNewStudy(1L, study);
assertNotNull(study.getOwner());
// memberService Mock 에 있는 것 중 딱 한번 notify가 호출이 됐어야한다. 호출이 안됐으면 exception 발생
verify(memberService, times(1)).notify(study);
verify(memberService, times(1)).notify(member);
// 몇번 호출 되는지도 확인 가능함( never : 한번도 사용되지 않음 )
verify(memberService, never()).validate(any());
// 호출 순서도 테스트 할 수 있음(순차적으로 테스트 할 것) : study가 먼저 호출되고 member가 나중에 호출 되는지 확인
// 순서까지는 굳이 테스트 안해도 됨
InOrder inOrder = inOrder(memberService);
inOrder.verify(memberService).notify(study);
inOrder.verify(memberService).notify(member);
// 더이상 테스트를 진행 할 필요가 없다.
verifyNoMoreInteractions(memberService);
}
verify의 times(1)
: 메소드가 정해진 만큼 호출이 됐는지 검증한다.(never는 한번도 호출이 되지 않는 경우)
InOrder는 메소드 호출 순서 검증을 위해 사용한다. (굳이 사용은 잘 안함)
: 검증 하고싶은 순서대로 verify를 사용하여 작성해 주면 된다.
verifyNoMoreInteractions 이 나오면 더이상 검증할 필요가 없다는 말이므로 그 이후에 메서드를 호출하는 경우가 있으면 테스트가 실패한다.
만약 times(1)인데 한번도 호출되지 않았다면 아래와 같은 에러가 발생한다.
'JAVA' 카테고리의 다른 글
int 와 long (0) | 2022.12.27 |
---|---|
BDD 스타일 Mockito API (0) | 2022.12.26 |
Mock 객체 stubbing (0) | 2022.12.15 |
Mockito (0) | 2022.12.14 |
JUnit5 Assertions (0) | 2022.12.14 |