단위 테스트와 통합 테스트를 분리해야합니까?


17

프로젝트에 대한 단위 테스트 및 통합 테스트를 작성해야합니다.

  • 모든 테스트를 단일 테스트 폴더에 넣어야 합니까?
  • 아니면 단위 테스트와 통합 테스트가 각각 별도의 테스트 폴더에 있어야 합니까?
  • 아니면 별도의 프로젝트에 넣어야 합니까?

함께 사용하면이 접근 방식의 장점이나 단점이 있습니까?


1
CI 환경에서 작업하는 경우 통합 테스트가 항상 빌드 서버에서 실행되는 것은 아니기 때문에 속성 등으로 쉽게 식별 할 수 있어야합니다.
Robbie Dee

답변:


18

일반적으로 그렇습니다. 통합 테스트와 단위 테스트를 다른 폴더에 넣어야합니다. 종종 프로그래머는이 두 종류의 테스트 사이에 명확한 선을 그리지 않고 유용한 테스트를 작성합니다. 그러나 통합 테스트에는 종종 다음이 포함되므로 느리게 진행됩니다.

  • 데이터베이스 쿼리
  • 네트워크 요청
  • 시간에 따른 행동
  • 많은 양의 데이터

반대로 단위 테스트는 값 비싼 작업을 조롱하므로 단위 테스트는 빠르게 실행되는 경향이 있습니다 (실제로 테스트 실행의 가장 느린 부분은 종종 테스트 프레임 워크 자체 임).

프로그래머가 시스템에서 작업 할 때는 편집 테스트주기에 있습니다. 테스트 피드백을 더 빨리 받고주기가 짧을수록 더 생산적 일 수 있습니다. 따라서 우리는 신속하게 완료되는 중요한 테스트 만 실행하려고합니다. 완전한 테스트 스위트는 QA 프로세스의 일부 (예 : CI 서버)로만 실행됩니다.

이는 큰 테스트 스위트가 분류되어야 함을 의미합니다. 특정 구성 요소에 대한 단위 테스트 만 선택할 수 있습니까? 느린 테스트를 제외 할 수 있습니까? 이를 수행하는 한 가지 간단한 방법은 다른 디렉토리에서 다른 테스트 스위트를 유지 보수하는 것입니다. 테스트가 거의없는 경우 프로그래머가 테스트 하위 세트를 쉽게 선택할 수있는 한 단일 디렉토리도 정상입니다.

프로그래머가 신속하게 피드백을받을 수있는 것은 무엇이든 좋습니다. 가장 포괄적 인 테스트 스위트는 정기적으로 실행되지 않더라도 중요하지 않습니다.

더 읽을 거리 :


폴더를 분리 할 때 각 폴더를 프로덕션 코드와 동일한 패키지로 유지합니까 (보호 된 방법을 테스트 할 수 있습니까)? 예를 들어, 단위 테스트를위한 maven 모듈과 통합 테스트를위한 다른 maven 모듈을 만듭니다. 이와 같이 분리하여 보호 된 방법을 쉽게 테스트 할 수 있습니다.
ihebiheb

@ihebiheb Java에서 패키지 가시성을 사용하는 것은 상당히 어색하다. 경우에 따라 사용하고 단위 테스트에서 이러한 API에 액세스하는 것이 도움이 될 수 있습니다. 그러나 일반적으로 불필요합니다. 통합 스타일 테스트는 패키지 개인 멤버에 액세스 할 필요가 없습니다. 테스트를 별도의 Maven 프로젝트에 넣을지 여부는 테스트 실행 및 배포 방법에 따라 다릅니다. 나는 Java / Maven에서 이것이 합리적인 것이 무엇인지 말해 줄 수는 없습니다.
amon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.