무엇 이다 단위 정말, 시험? 그리고 여기에 실제로 큰 이분법이 있습니까?
버퍼 끝에서 문자 그대로 1 비트를 읽는 것이 프로그램을 완전히 중단 시키거나 프로그램이 완전히 부정확 한 결과를 초래하거나 최근 "HeartBleed"TLS 버그에 의해 입증 된 것처럼 안전한 시스템을 넓게 배치하는 분야에서 일합니다. 결함의 직접적인 증거없이 생산합니다.
이러한 시스템에서 모든 복잡성을 제거하는 것은 불가능합니다. 그러나 우리의 임무는 가능한 한 복잡성을 최소화하고 관리하는 것입니다.
예를 들어 예약이 3 개의 다른 시스템에 성공적으로 게시되고 로그 항목이 작성되고 이메일 확인이 발송되는지 확인하는 테스트가 단위 테스트입니까?
나는 아니오 라고 말할 것 입니다. 그것은 통합 테스트입니다. 그리고 그들은 분명히 자신의 자리를 가지고 있지만, 다른 주제이기도합니다.
통합 테스트는 전체 "기능"의 전체 기능을 확인하기 위해 작동합니다. 그러나이 기능의 배후 코드는 간단하고 테스트 가능한 빌딩 블록, 즉 "단위"로 세분화해야합니다.
따라서 단위 테스트의 범위는 매우 제한적이어야합니다.
이는 단위 테스트에서 테스트 한 코드의 범위가 매우 제한적 임을 의미합니다 .
이는 훌륭한 디자인의 기둥 중 하나가 복잡한 문제를 서로 독립적으로 테스트 할 수있는 더 작은 단일 목적 조각 (가능한 범위까지)으로 나누는 것임을 암시합니다.
당신이 끝내는 것은 신뢰할 수있는 기초 구성 요소로 구성된 시스템이며, 코드의 기본 단위 중 하나라도 간단하고 작은 범위로 제한된 테스트를 작성하여 정확히 그 사실을 알려 주었기 때문에 알고 있습니다.
대부분의 경우 장치 당 여러 테스트를 수행해야 할 수도 있습니다. 테스트 자체는 단순해야하며 가능한 한 한 가지 동작 만 테스트해야합니다.
사소하고 복잡한 논리를 테스트하는 "단위 테스트"의 개념은 약간의 옥시 모론이라고 생각합니다.
따라서 이러한 종류의 고의적 인 설계 고장이 발생한 경우 , 테스트 된 코드 단위의 기본 기능이 변경 되지 않는 한 , 세계에서 어떻게 단위 테스트가 갑자기 오 탐지를 생성 할 수 있습니까? 만약 그 일이있다, 당신은 더 나은 플레이의 일부가 아닌 명백한 파급 효과가있다 생각합니다. 오탐 (false positive)을 생성하는 것으로 보이는 깨진 테스트는 실제로 일부 변경으로 인해 코드베이스에서 더 많은 종속성이 손상되었다는 경고이며 실제로 검사하고 수정해야합니다.
이러한 단위 중 일부 (대다수)는 모의 객체를 사용하여 테스트해야 할 수도 있지만, 더 복잡하거나 정교한 테스트를 작성해야한다는 의미는 아닙니다.
예약 시스템 내 인위적인 예를 다시가는, 당신은 정말 라이브 예약 데이터베이스 또는 타사 서비스 (또는 심지어 "dev에"예) 때마다 당신이에 떨어져 요청을 전송 할 수없는 단위 테스트 코드를.
따라서 동일한 인터페이스 계약을 제시하는 모형을 사용합니다. 테스트는 상대적으로 작고 결정적인 코드 덩어리의 동작을 검증 할 수 있습니다. 보드 전체에 초록색이 표시되면 기초 를 구성 하는 블록 이 파손되지 않았 음을 나타냅니다.
그러나 개별 단위 테스트의 논리 자체는 가능한 한 단순하게 유지됩니다.