2010-08-02 5 views
7

Im는 Grails로 개발 중입니다. 프레임 워크가 데이터를 부트 스트랩하고 스프링 컨텍스트를 완전히 플러시하므로, 필자는 서비스에 대한 많은 통합 테스트를 작성합니다. 나는 그것을 다시 말하게한다. 나는 서비스를위한 단위 테스트를 쓰지 않고 통합 테스트만을 쓰는 것을 발견했다. 이것은 나쁜 생각입니까? 내가보기에 유일한 단점은 테스트가 조금 더 오래 걸린다는 것입니다.통합 대 유닛 테스팅

컨트롤러와 같이 컨트롤러에서 단위 테스트를 사용합니다. 다양한 응용 프로그램 흐름, 결과 유형, 리디렉션 논리 등을 테스트하고 있습니다.하지만 작성한 테스트의 대부분은 통합 테스트입니다. 이것은 전통적 J2EE 테스트와의 단절된 것으로 보이는데, 대부분 단위 테스트가 작성됩니다.

edit- 분명히 말하면, 통합 테스트는 코드가 복잡하기 때문에 통합 테스트를 작성하지 않습니다. 통합 테스트 만 수행하면됩니다. 프레임 워크가 당신에게 너무 많은 것을 제공하기 때문에 모든 것을 함께 테스트하는 것이 더 쉽기 때문에 통합 테스트를 작성합니다. 나는 서비스가 acegi authenticationService와 협력한다면, 나는 그것을 조롱한다. 특별한 셋업없이 실행되는 테스트를하기 위해서는 웹 서비스와 상호 작용할 때마다 나는 조롱한다.

+4

통합 테스트는 단위 테스트보다 더 취약 할 수 있습니다. 대부분 통합 테스트를 작성하는 경우 프로젝트를 리팩터링하여보다 쉽게 ​​단위 테스트 할 수 있도록하십시오. 코드를 테스트 할 수 있도록 작성하면 단위 테스트가 통합 테스트보다 작성하기가 쉽고 안정적입니다 (중단 될 가능성이 적음). 통합 테스트는 시스템 구성 요소 간의 상호 작용을 테스트하는 데 적합하지만 항상 적절한 코드 적용 범위를 제공하지는 않으므로 단위 테스트를 대신 할 수 없습니다. –

답변

11

특히 논리가 낮은 연결 요소가 많은 경우에는 기능 테스트가 더 많고 단위 테스트가 줄어들고 있습니다. 특정 클래스에서 복잡한 알고리즘을 구현하면 일반적으로 단위 테스트를 작성하지만 복잡성이 다른 구성 요소와 통합되는 경우 (매우 자주 발생 함) 단위 테스트는 번거롭지 않습니다.

0

모의 프레임 워크를 사용하여 개별 테스트를 위해 서비스의 다른 부분을 격리 할 수 ​​있습니다. 대규모 Spring 컨텍스트에 의존하는 대신 서비스 클래스를 직접 인스턴스화하고 테스트와 직접 관련이없는 종속성을 모의로 채 웁니다. 의존성을 분리하기 위해 약간의 리팩터링이 필요할 수도 있지만 일반적으로 최선의 방법입니다. 이것은 몇 가지 대규모 통합 테스트에 의존하는 대신 더 많은 테스트와 작은 테스트를 작성할 수 있습니다.

많은 기존의 테스트가 실제로 통합 테스트 인 경우와 비슷한 상황에 있으며, 앞으로는이를 변경하는 것이 어렵지 만 불가능하지 않을 수 있습니다.

2

일반적으로 중요한 측정은 코드 적용 범위입니다.

글로벌 인터페이스가보다 안정적이라면 (변화가 적은) 통합 테스트를하는 것이 유리할 수 있습니다.

0

가능한 한 빨리 오류를 표시해야합니다. 가능한 한 빨리 코드를 테스트하는 것이 좋습니다. 이상적인 경우에는 코드가 여전히 독자적으로 제어되고있는 것이 이상적입니다. 나중에 오류가 발견되면 수정 비용이 높아집니다.

평범하지 않은 논리를 노출하는 경우 단원 테스트 및 해당 논리의 노출과 통합 테스트의 외부 종속성과의 상호 작용을 통해 주요 결정 경로의 논리를 테스트해야합니다.

독점 개발자이거나 소규모 팀에서 일하는 경우 단위 테스트와 통합 테스트를 구별하기가 어렵습니다. 여러 팀이 하나의 제품으로 작업하는 환경에있는 경우, 코드 내의 로직이 이미 검증 (단위 테스트)되어 있고 이제 모듈이 서로 어떻게 연동 하는지를보고 싶다는 가정이 있습니다 (통합 테스트) .

테스트가 프로젝트 또는 개발 환경에서 나중 단계로 연기되기 때문에 통합 테스트에 너무 많이로드하는 패턴이 아니며 조만간 오류를 발견하고 있음을 알게 될 것입니다 코드가 책상을 나섰다. 그것은 당신이 이전에 발견 할 수 있고 또한 알아야 할 것이었던 것을 고치는 동안 전체 및 아마도 제품 릴리스를 견디는 것을 의미합니다.

관련 문제