Mock 테스트 오류 when() requires an argument which has to be 'a method call on a mock'.

Jang990·2023년 5월 4일
0

오류 상황

서비스 단에서 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으로 객체를 만들어주자...

profile
공부한 내용을 적지 말고 이해한 내용을 설명하자

0개의 댓글