단위 테스트와 통합 테스트의 결정적인 장점은 무엇입니까?
그것은 틀린 이분법입니다.
단위 테스트 및 통합 테스트는 유사하지만 서로 다른 두 가지 용도로 사용됩니다. 단위 테스트의 목적은 분석법이 작동하는지 확인하는 것입니다. 실제 용어로, 단위 테스트는 코드 가 단위 테스트에 의해 요약 된 계약을 충족 하는지 확인합니다 . 이것은 단위 테스트가 설계되는 방식에서 분명합니다. 코드는 무엇을해야하는지 명시하고 코드가 그렇게 한다고 주장 합니다.
통합 테스트는 다릅니다. 통합 테스트는 소프트웨어 구성 요소 간의 상호 작용을 연습합니다. 모든 테스트를 통과하고 올바르게 상호 작용하지 않기 때문에 통합 테스트에 실패하는 소프트웨어 구성 요소를 가질 수 있습니다.
그러나 단위 테스트에 결정적인 이점이 있다면 다음과 같습니다. 단위 테스트를 설정하는 것이 훨씬 쉽고 통합 테스트보다 훨씬 적은 시간과 노력이 필요합니다. 올바르게 사용하면 단위 테스트를 통해 "테스트 가능한"코드를 개발할 수 있습니다. 즉, 최종 결과가보다 안정적이고 이해하기 쉬우 며 유지 관리하기 쉬워집니다. 테스트 가능한 코드는 일관된 API, 반복 가능한 동작과 같은 특정 특성을 가지고 있으며 주장하기 쉬운 결과를 반환합니다.
복잡한 테스트, 복잡한 설정 및 어려운 어설 션이 필요한 경우가 많으므로 통합 테스트는 더 어렵고 비용이 많이 듭니다. 최고 수준의 시스템 통합에서 UI에서 사람의 상호 작용을 시뮬레이션하려고합니다. 전체 소프트웨어 시스템은 이러한 종류의 자동화에 전념합니다. 그리고 우리가 추구하는 것은 자동화입니다. 휴먼 테스트는 반복 할 수 없으며 자동화 된 테스트처럼 확장되지 않습니다.
마지막으로 통합 테스트는 코드 범위를 보장하지 않습니다. 통합 테스트로 몇 개의 코드 루프, 조건 및 분기 조합을 테스트하고 있습니까? 당신은 정말로 알고 있습니까? 단위 테스트 및 테스트중인 메소드와 함께 사용할 수있는 도구가 있으며 코드 범위 및 코드의 순환 복잡도를 알려줍니다. 그러나 단위 테스트가 진행되는 방법 수준에서만 제대로 작동합니다.
리팩토링 할 때마다 테스트가 변경되면 다른 문제입니다. 단위 테스트는 소프트웨어가 수행하는 작업을 문서화하여 수행한다는 것을 입증 한 다음 기본 구현을 리팩토링 할 때 다시 수행한다는 것을 입증해야합니다 . API가 변경되거나 시스템 설계의 변경에 따라 변경해야 할 메소드가 필요한 경우, 그 결과가 발생합니다. 많은 일이 일어나면 코드를 작성하기 전에 먼저 테스트 작성을 고려하십시오. 이를 통해 전체 아키텍처에 대해 생각하고 이미 설정된 API로 코드를 작성할 수 있습니다.
사소한 코드에 대한 단위 테스트를 작성하는 데 많은 시간을 소비하는 경우
public string SomeProperty { get; set; }
그런 다음 접근 방식을 다시 검토해야합니다. 단위 테스트는 동작 을 테스트하는 것으로 간주되며 위 코드 줄에는 동작이 없습니다. 그러나 속성이 코드의 다른 곳에서 참조되기 때문에 코드 어딘가에서 종속성을 만들었습니다. 그렇게하는 대신 필요한 속성을 매개 변수로 받아들이는 메서드를 작성해보십시오.
public string SomeMethod(string someProperty);
이제 메소드는 외부에 의존하지 않으며 완전히 자체 포함되어 있기 때문에 더 테스트 가능합니다. 물론, 항상 그렇게 할 수는 없지만 코드를 더 테스트 가능한 방향으로 옮기고 이번에는 실제 행동에 대한 단위 테스트를 작성합니다 .