서비스 단에서 Long 타입의 ClientId로 DB에서 조회하는 부분을 단위 테스트해보았다.
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
@Test
public void testFindUser() throws Exception {
//given
Long searchId = 1L;
String searchName = "test";
Client findClient = new Client("test", "test", null, null, null, null);
when(repository.findById(searchId)).thenReturn(Optional.ofNullable(findClient));
when(findClient.getId()).thenReturn(searchId); // 오류가 발생하는 부분
//when
ClientResponse response = clientService.findUser(searchId);
//then
assertThat(response.getClientId()).isEqualTo(searchId);
assertThat(response.getName()).isEqualTo(searchName);
}
내가 의도한 것은 서비스에서 entity를 response로 변경할 때 ID값이 필요한데 이때 searchId가 반환되어 response로 들어가길 기대했다.
하지만 이 부분에서 오류가 발생했다.
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
@Test
public void testFindUser2() throws Exception {
//given
Long searchId = 1L;
String searchName = "test";
Client findClient = mock(Client.class); // 해당 코드를 통해 해결
when(repository.findById(searchId)).thenReturn(Optional.ofNullable(findClient));
when(findClient.getId()).thenReturn(searchId);
when(findClient.getName()).thenReturn(searchName);
//when
ClientResponse response = clientService.findUser(searchId);
//then
assertThat(response.getClientId()).isEqualTo(searchId);
assertThat(response.getName()).isEqualTo(searchName);
}
테스트에서 객체에 행위를 정의할 때는 mock으로 객체를 만들어주자...