강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

한지찬님의 프로필 이미지
한지찬

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??

작성

·

36

0

강의를 수강한 이후 테스트 코드를 짜다가 문득 궁금하여 문의드립니다.

 

보통 테스트 코드는 입력이 있고, 그것에 대한 출력을 검증하는 것인데 반환 값이 void면 어떻게 테스트 코드를 짜면 되는지 궁금합니다. (예를들어 단순 update문)

 

copilot이나 ai는 verify로 행위 검증을 하던데... 이렇게 하는게 맞는건지, 아니면 void로 반환하는것 자체를 지양하는게 좋은지... 의견을 여쭙고 싶습니다!!!

답변 2

1

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, 한지찬 님!

몇 가지 명제들을 제시하며 답변 드리겠습니다.

  • 테스트를 위해서 void 메서드를 억지로 반환값이 있는 형태로 바꾼다. (X)

  • 메서드의 의미상 반환 값이 존재하는 형태가 더 자연스럽다면 void 보다는 반환 값이 있는 형태가 여러모로 좋다. (O)

    • 이 때 검증은 반환되는 값이 예상한 값과 일치하는지 확인하는 방법을 사용할 수 있다.

  • 메서드의 의미상 void가 더 자연스럽다면 void로 만드는 것이 좋다. (O)

    • 이 때 검증은 verfiy 등을 활용할 수 있다.

테스트 코드와 프로덕션 코드는 공존하는 관계여야 하며, 테스트의 용이함을 위해 프로덕션 코드를 그에 유리한 쪽으로 변경할 수는 있지만, 해당 행위가 본래의 그 의미를 해칠 정도로 과해서는 안 됩니다. verify를 사용하는 것이 잘못된 방법도 아니고요. 여러 존재하는 검증 방법 중 적절한 방법을 찾아 선택하는 것이 중요하겠습니다.

도움이 되셨기를 바랍니다.
감사합니다. 🙂

한지찬님의 프로필 이미지
한지찬
질문자

친절한 답변 감사드립니다!

0

안녕하세요, 인프런 AI 인턴입니다. 한지찬님!

테스트 코드를 작성할 때 void 메서드는 반환값이 없어 직접 검증이 어려울 수 있습니다. void 메서드를 테스트하기 위한 일반적인 방법은 행위 검증을 통해 간접적으로 확인하는 것입니다. Mockito에서는 verify 메서드를 사용하여 특정 메서드가 호출되었는지 여부를 확인할 수 있습니다. 예를 들어, update 메서드가 제대로 실행되었는지 확인하기 위해 해당 메서드가 호출되었다는 사실을 증명할 수 있습니다.

행위 검증의 예시:
- 특정 레포지토리의 save 메서드가 호출되었음을 검증하는 코드:

  verify(myRepository, times(1)).save(any());

그러나 가능한 경우, 명확한 반환값을 제공하여 테스트가 수월하도록 설계하는 것이 권장됩니다. 반환값을 통해 메서드의 결과를 직접 검증할 수 있기 때문입니다. 그러나 모든 경우에 반환값을 제공할 수 없는 상황이라면, 행위 검증을 통해 충분히 테스트할 수 있습니다.

관련된 다른 질문들에서도 void 메서드의 테스트와 관련된 유용한 논의를 볼 수 있습니다. 아래 URL에서 이야기한 내용을 참고하시면 도움이 될 것 같습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

한지찬님의 프로필 이미지
한지찬

작성한 질문수

질문하기