해결된 질문
작성
·
40
0
강사님 안녕하세요.
전에 독립적인 환경에서 실행하면 병렬처리가 된다고 하셨던 것 같은데,
그렇다면 생성하는 코드 후 id 비교를 할 때
다른 테스트 코드에서 상품이 등록되어 반환되는 리스트가 달라질 수 있다고 생각됩니다.
그렇다면 이런 경우에는 이 테스트가 진행될 때는 다른 테스트가 동작하지 않게 처리하던가 하는 방식이 있나요?
예를 들어 최신 리스트를 반환한다고 할 때
테스트 리스트를 넣고
act 하기 전에 다른 테스트에서 arrange 단계에 추가 코드가 동작되면
act에서 리스트 조회할 때 반환할 때 다른 곳에서 추가한 값이 반환되어 테스트 실패
이렇게 될 것 같아 질문드립니다.
좋은 강의 감사드립니다.
답변 2
1
HAHA님 안녕하세요. 강의 수강해 주셔서 감사합니다.
말씀하신 것처럼 테스트 간에 서로 영향을 주는 상황이라면 '독립적인 환경'이 아니라고 판단할 수 있습니다.
따라서 병렬 실행 시 다양한 문제들이 발생할 수 있으니 독립적이지 못한 환경에서 실행되는 테스트들은 병렬로 실행하지 않아야 합니다.
답변이 부족하다면 말씀해주세요. :)
0
안녕하세요, 인프런 AI 인턴입니다. HAHA님.
테스트 환경에서 병렬 처리와 관련된 문제는 사실 많은 개발자들에게 익숙한 도전 과제입니다. 특히 테스트가 독립적으로 동작하지 않아 예상치 못한 데이터 충돌을 일으킬 수 있기 때문입니다. 이러한 문제를 해결하기 위해 몇 가지 접근법을 고려할 수 있습니다.
테스트 격리: 가장 기본적인 방법은 테스트가 완전히 격리되어 동작하도록 하는 것입니다. 이를 위해 각 테스트가 별도의 데이터베이스 인스턴스를 사용하거나, 테스트가 실행될 때마다 데이터베이스를 초기화할 수 있습니다.
Mocking 활용: 테스트 시 실제 데이터베이스 대신 Mock을 사용하여 데이터의 상태를 제어하는 방법도 있습니다. 이를 통해 예상치 못한 데이터 변경을 피할 수 있습니다.
테스트 순서 제어: JUnit이나 TestNG 같은 테스트 프레임워크에서는 테스트의 실행 순서를 제어하는 기능을 제공합니다. 이를 활용하여 병렬 실행이 아닌, 순차 실행으로 변환할 수 있습니다.
Spring’s @DirtiesContext 사용: Spring에서는 @DirtiesContext
어노테이션을 사용하여 특정 테스트가 끝난 후 컨텍스트를 초기화할 수 있습니다. 이를 통해 특정 테스트가 전체 상태를 변경했다면, 이후 테스트는 새롭게 초기화된 상태에서 시작할 수 있도록 합니다.
관련하여 좀 더 자세한 방법을 알고 싶다면, 다음 게시물을 참고해 보시면 도움이 될 것입니다:
- 프로젝트 규모가 큰 경우 @SpringBootTest 실행 속도 문제
이 게시물에서는 대규모 프로젝트에서 테스트를 효율적으로 관리하는 다양한 전략을 소개하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드립니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.