Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Test] Service 레이어의 테스트 코드 작성 시 주의사항 #25

Open
SeokRae opened this issue Sep 19, 2021 · 0 comments
Open
Assignees
Labels
error issue 프로젝트 진행시 발생한 에러 정리

Comments

@SeokRae
Copy link
Member

SeokRae commented Sep 19, 2021

JUnit5 테스트를 사용하며 @ExtendWith(MockitoExtension.class) 어노테이션을 테스트 클래스에 선언 후 테스트를 작성.

given()을 통해 mocking 데이터를 생성 후 User를 생성하는 코드를 테스트 진행

아래와 같은 코드 작성 시

    @DisplayName("사용자 비즈니스 테스트")
    @Test
    void testCase1() {
        // given
        RequestSaveUser saveUser =
                RequestSaveUser.of("[email protected]", "seok", "1234");
        User actual = RequestSaveUser.toEntity(saveUser);
        // mocking 데이터 생성
        given(userRepository.save(any())).willReturn(actual);
        given(userRepository.findByEmail(any())).willReturn(Optional.of(actual));

        // when
        ResponseUser responseUser = userBusinessService.addUser(saveUser);

        // then
        assertThat(actual.getEmail()).isEqualTo(responseUser.getEmail());
    }
Unnecessary stubbings detected.
Clean & maintainable test code requires zero unnecessary code.
Following stubbings are unnecessary (click to navigate to relevant line of code):
  1. -> at com.example.realworld.application.users.service.UserBusinessServiceTest.testCase1(UserBusinessServiceTest.java:49)
Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for UnnecessaryStubbingException class.
org.mockito.exceptions.misusing.UnnecessaryStubbingException:

라는 에러를 발생 시킨다.

이유는 생성한 stub에 대한 테스트 실행 중에 실현되지 않은 stub이 존재하여 발생하는 오류이다.

@MockitoSettings(strictness = Strictness.LENIENT) 라는 어노테이션을 클래스에 설정하면 실행되지 않은 stub으로인한 에러를 없앨 수 있으나 이는 정확한 해결방법이 아니다.

  • MockitoHint 에 따르면 불필요한 stubing을 제거하는 것이 좋다고 나와 있다.

이유는 코드베이스를 깨끗하게 유지보수 가능하도록 만들려면 불필요한 코드를 제거해야 하기 때문이다.

  • 결론은 stub에 대한 테스트 코드를 작성하는 것으로 수정하거나, 관련 불필요한 stub을 제거하는 것 중에 선택하면 된다는 것이다.
@SeokRae SeokRae self-assigned this Sep 19, 2021
@SeokRae SeokRae added the error issue 프로젝트 진행시 발생한 에러 정리 label Sep 19, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
error issue 프로젝트 진행시 발생한 에러 정리
Projects
None yet
Development

No branches or pull requests

1 participant