종단 간 테스트 대 단위 테스트는 테스트를 분리해야합니까?


23

회사에서는 일반적으로 웹 사이트 / 웹 앱에 대한 엔드 투 엔드 테스트를 작성해야합니다. 즉, URL에 액세스하고 양식을 작성하고 다른 URL에 양식을 제출하고 페이지 결과를 확인해야합니다. 양식 유효성 검사를 테스트하고 HTML 템플릿에 올바른 컨텍스트 변수가 있는지 테스트합니다.

또한 기본 논리를 간접적으로 테스트하는 데 사용합니다.

동료에게 이것이 엔드-투-엔드 테스트를 통과하는 한 언제든지 기본 구현을 제거하고 변경할 수 있기 때문이라고 들었습니다.

이런 종류의 디커플링이 의미가 있는지 또는 더 작은 코드 단위에 대한 테스트 작성을 피하는 방법인지 궁금합니다.


6
was told by a co-worker that the reason for this is that we can rip out and change the underlying implementation at any point as long as the end-to-end tests pass.-단위 테스트에서도 마찬가지입니다. 엔드 투 엔드 테스트가 단위 테스트를 작성하지 않는 것에 대한 변명으로 사용되는 것처럼 들립니다.
Robert Harvey

12
단위 테스트에는 해당되지 않습니다. 메소드 또는 클래스를 변경 / 제거 / 만들려면 해당 메소드 또는 클래스에 대한 모든 단위 테스트를 업데이트해야합니다. 최종 사용자 기능이 변경되지 않는 한 종단 간 테스트에서는 그렇지 않습니다. 시스템 레벨 리 팩터 (최종 사용자 기능 수정 없음) 인 경우 엔드 투 엔드 테스트를 변경할 필요가 없습니다.
dietbuddha

2
@dietbuddha, 나는 일반적인 개념이 단위 테스트에 해당하지만 더 작은 (단위) 범위에 있다고 생각합니다.
Sam

답변:


38

종단 간 테스트도 필요합니다. 모든 장치를 올바르게 연결했는지 어떻게 알 수 있습니까? 매우 간단한 코드에서는 엔드 투 엔드 테스트만으로 코드를 통해 모든 경로를 테스트 할 수 있지만 더 많은 레이어를 얻으면 비용이 훨씬 많이 듭니다.

예를 들어 각각 5 개의 가능한 경로가있는 3 개의 레이어가 있다고 가정합니다. 전체 응용 프로그램을 통해 모든 경로를 테스트하려면 5 개의 엔드 투 엔드 테스트 가 필요 하지만 5 ~ 3 개의 단위 테스트만으로 각 장치를 통해 모든 경로를 테스트 할 수 있습니다. 엔드-투-엔드 테스트 만 수행하는 경우 대부분 오류 처리 및 경계 조건에서 많은 경로가 무시됩니다.


좋은 대답입니다. 나는 둘 다의 가치를 볼 수 있지만 엔드 투 엔드 테스트로 모든 경로를 완벽하게 테스트 할 수있는 가능성을 보는 것이 왜 단위 테스트를 수행해야 하는지를 설명하는 데 도움이됩니다.
Rudolf Olah

14
단위 테스트는 문제를 신속하게 지역화하기 때문에 주로 가치가 있다고 생각합니다. 엔드 투 엔드는 모든 것이 함께 작동한다는 확신을주기 때문에 가치가 있습니다.
Jason Swett

20

예, 종단 간 테스트 (또는 통합 테스트)는 의미가 있지만 단위 테스트도 의미가 있습니다. 둘 다 일반적으로 다른 종류의 버그를 잡기 때문에 이상적으로 둘 다 있습니다. 따라서 엔드 투 엔드 테스트를하는 것이 단위 테스트를하지 않은 것에 대한 변명이되어서는 안됩니다.


2
문구에 대한 간단한 메모; 정확한 과학은 아니지만 많은 사람들이 종단 간 테스트와 통합 테스트가 다르다고 말할 것입니다. 참조 stackoverflow.com/questions/4904096/...
sbrattla

6

몇 년간의 코딩과 프로젝트 작업을 마친 후에 본인의 질문에 대한 답변을 제공 할 것입니다.

예, 단위 테스트를 작성해야합니다. 엔드 투 엔드 테스트는 UI 구성 요소에 의존하는 경우 특히 작성하기가 어렵고 부서지기 쉽습니다.

Django 또는 Rails와 같은 프레임 워크 (또는 자신의 사용자 정의 클래스)를 사용하는 경우 폼의 유효성 검사를 처리하는 폼 클래스가 있어야합니다. 또한 렌더링 된 템플릿과 양식을 표시하고 GET 및 POST 요청을 처리하는보기 클래스가 있습니다.

엔드 투 엔드 테스트에서는 다음을 수행합니다.

  1. URL을 얻을
  2. 유효한 데이터로 양식을 작성하십시오
  3. 양식을 URL에 게시
  4. 데이터베이스가 업데이트되었거나 유효한 양식의 결과로 일부 조치가 실행되었는지 확인하십시오.

많은 코드를 테스트하고 있으며 적용 범위는 꽤 좋지만 모든 것이 올바르게 될 때만 행복한 길을 테스트하고 있습니다. 양식에 올바른 유효성 검사가 있는지 어떻게 확인합니까? 해당 양식이 여러 페이지에 사용되면 어떻게됩니까? 또 다른 엔드 투 엔드 테스트를 작성하십니까?

단위 테스트로 다시 시도해 보겠습니다.

  1. 뷰 GET 방법 테스트
  2. 가짜 / 모의 양식으로 view POST 메소드를 테스트하십시오.
  3. 유효한 데이터로 양식을 테스트하십시오.
  4. 유효하지 않은 데이터로 양식을 테스트하십시오.
  5. 양식의 부작용 테스트

단위 테스트를 사용하면 작은 코드 조각을 테스트 할 수 있으며 테스트는 구체적이고 작성하기 쉽습니다. 이것을 TDD (Test Driven Development)와 결합하면 더 높은 품질의 코드를 얻게됩니다.

자동화 된 테스트 가 없는 프로젝트를 수행 할 때는 어딘가에서 시작해야하기 때문에 단위 테스트 작성이 쉬워서는 안됩니다 . 단위 테스트로 시작하는 것이 더 쉽고 빠르며, 행복한 길을 찾는 것보다 버그를 즉시 테스트 할 수 있습니다.


: 다른 데이터 포인트는 구글 테스트 블로그는 더 이상 end2end 시험을 말한다 googletesting.blogspot.ca/2015/04/...
루돌프 Olah

5

실제로 엔드-투-엔드 (end-to-end) 테스트 또는 통합 테스트는 단위 테스트보다 더 중요합니다. 시스템이 완전히 작동하는지 확인하기 때문입니다. 단위 테스트는 시스템의 통합 부분을 다루지 않으며, 특히 대규모 프로젝트에서는 복잡한 작업입니다.

그러나 앞서 말했듯이 통합 테스트에서 가장 중요한 경우를 포착하기가 더 복잡하므로 단위 테스트도 수행해야합니다.


1

단위 테스트는 단위 동작을 확인하는 반면 시스템 동작을 확인합니다. 각각의 장점과 비용은 다릅니다. 당신은 하나 또는 다른 하나 또는 둘 다 할 수 있습니다.

내 작업에서 우리는 설명 한 것과 비슷한 단위 테스트없이 합격 테스트 주도 개발을 수행합니다. 우리는 시간이 지남에 따라 두 가지를 모두 시작했으며 결국 우리에게 이익을 초과하는 비용에 대한 단위 테스트를 제거했습니다.

그렇다고해서 문제 영역과 환경에 대한 비용 / 혜택이 다양한 자동화 테스트 관행을 포함한 모든 개발 관행에 참여하도록 결정을 이끌어 내야한다고 생각합니다. 나는 신앙보다는 모든 관행이 그것을 뒷받침하기 위해 사용되는 맥락에서 경험적 증거를 갖는 것을 선호합니다.


내가 걱정하는 것은 더 작은 단위 대신 큰 클래스 또는 메소드로 이어지는 승인 테스트를 위해 코딩 할 것입니다.
Rudolf Olah

@omouse : 단위 테스트를 작성하지 않기 때문에 좋은 코드를 작성하지 않아도됩니다. 그러나 경험이 없거나 나쁜 습관을 가진 프로그래머가 있다면 혜택이 비용을 능가 할 수 있습니다. 두 경우 모두 분석을 수행하고 간단한 방정식으로 줄여야합니다. For Any Practice: Practice iff Benefit > Cost
dietbuddha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.