Junit 20강

연어는결국강으로·2022년 10월 7일
0

Junit

목록 보기
8/9

2022.10.07

20강. 서비스레이어 테스트 - 가짜환경 Mock로 테스트

아래와 같이 어노테이션을 붙인다.

@ExtendWith(MockitoExtension.class)
public class BookServiceTest {

가짜의존성을 아래처럼 주입한다. 또한 MailSenderStub이 아닌 MailSender 인터페이스를 넣는다.

@InjectMocks
private BookService bookService;

@Mock
private BookRepository bookRepository;

@Mock
private MailSender mailSenDer;

그리고 책등록하기_테스트 메서드를 아래와 같이 바꾼다.

	@Test
	public void 책등록하기_테스트() {
		// given
		BookSaveReqDto dto = new BookSaveReqDto();
		dto.setTitle("junit lecture");
		dto.setAuthor("momo");
		
		// stub
		when(bookRepository.save(ArgumentMatchers.any())).thenReturn(dto.toEntity());
		when(mailSenDer.send()).thenReturn(true);
		
		// when
		BookRespDto bookRespDto =  bookService.책등록하기(dto);
		
		// then
		// assertEquals(dto.getTitle(), bookRespDto.getTitle());
		// assertEquals(dto.getAuthor(), bookRespDto.getAuthor());
		assertThat(bookRespDto.getTitle()).isEqualTo(dto.getTitle());
		assertThat(bookRespDto.getAuthor()).isEqualTo(dto.getAuthor());
		
	}

when에서 any()를 쓰기전에는 똑같이 dto.toEntity()를 썻더니 두 객체의 매모리가 다르다고 나오면서 테스트 실패가 떳다. 그것에 대한 해결방편이 any()이다. 무엇이 들어오든 dto.toEntity()를 리턴하라는 것이다.

마지막에 쓰인 assertThat은 assertJ라는 라이브러리에서 가져와서 쓴것이다. 그동안 쓰던 assertEquals는 생성자처럼 생겨서 좀 불편한데, 이것은 빌더와 유사해서(빌더패턴인지도 모르겠다.) 알아보기 편했다.

0개의 댓글