인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

leedongjae625님의 프로필 이미지

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

MyBatis 소개

DB 테스트 코드 작성에서 .containsExactly에 관한 질문

작성

·

35

0

안녕하세요! 섹션 4 강의를 보다보니 의문점이 생겨서요

 

Repository를 테스트하는 과정에서 test() 메서드에 .containsExactly를 사용하고있습니다.

강사님께서 내용과 순서가 모두 맞아야 한다고 설명하시더라고요.

 

메모리에서의 테스트나 DB를 조회할 때 순서를 보장할 수 없는 것으로 알고있는데 문제가 있을 수도 있지만 간단한 테스트를 위해서 사용한것인지 아니면 실제로도 이런식으로 테스트 하는지 궁금합니다.

관련한 질문들을 확인했으나 만족할만한 답변이 없어서 질문드립니다.

답변 2

0

y2gcoder님의 프로필 이미지

안녕하세요. leedongjae625님, 공식 서포터즈 y2gcoder입니다.

리스트 의 요소들을 테스트하실 때 순서가 정렬되지 않아도 될 때는

containsExactlyInAnyOrder()containsExactlyInAnyOrderElementsOf() 를 사용하기도 합니다 🙂

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. leedongjae625님.

containsExactly 메서드는 순서와 내용을 동시에 확인할 수 있도록 해주는 유용한 도구입니다. 이 메서드는 실제로 테스트 코드에서 많이 사용되며, 특히 순서가 보장되는 자료구조나 메서드를 사용할 때 유용합니다.

다만, 메모리를 직접 접근하거나 데이터베이스에서 결과를 가져올 때는 순서가 보장되지 않는 경우가 많습니다. 대부분의 데이터베이스는 정렬 조건을 명시적으로 지정하지 않으면 기본적으로 정렬 순서를 보장하지 않습니다.

강사님께서 사용하는 containsExactly는 주로 교육적 목적으로 중요한 개념을 강조하기 위한 것입니다. 실제 프로젝트에서 테스트 작성 시에는 데이터가 순서대로 반환된다고 가정하면 안 되고, 필요에 따라 정렬 조건을 명시적으로 추가하여 테스트를 보완하는 것이 좋습니다.

아래의 관련 질문 링크를 참고하면 더욱 도움이 될 수 있습니다:

  1. 예문 쿼리 결과 정렬 순서와 containsExactly

  2. HashMap을 사용한 MemoryItemRepository에서 순서 보장 문제와 테스트 실패 가능성 질문

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