기존 답변은 확실히 좋지만 질문에 대한이 근본적인 오해를 다루는 사람은 없습니다.
어느 시점에서나 모든 단위 테스트는 통과해야합니다
가장 확실하게 이것은 사실이 아닙니다. 소프트웨어를 개발하는 동안 NCrunch는 대개 갈색 (빌드 실패) 또는 빨간색 (테스트 실패)입니다.
NCrunch가 녹색 이어야하는 곳 (모든 테스트 통과)은 소스 제어 서버에 커밋을 푸시 할 준비가되었을 때입니다. 그 시점에서 다른 사람들이 내 코드에 의존 할 수 있기 때문입니다.
이것은 또한 새로운 테스트를 만드는 주제를 제공합니다 : 테스트는 코드의 논리와 행동을 표명해야합니다. 경계 조건, 결함 조건 등 새로운 테스트를 작성할 때 코드에서 이러한 "핫스팟"을 식별하려고합니다.
단위 테스트는 전제 조건, 예상 출력 등 내 코드 호출 방법을 문서화합니다.
변경 후 테스트가 중단되면 코드 또는 테스트에 오류가 있는지 확인해야합니다.
참고로, 단위 테스트는 때때로 테스트 주도 개발과 함께 진행됩니다. TDD의 원칙 중 하나는 깨진 테스트가 이정표라는 것입니다. 테스트가 실패하면 테스트를 통과하도록 코드를 수정해야합니다. 이번 주 초의 구체적인 예는 다음과 같습니다.
배경 : 필자는 개발자가 Oracle 쿼리를 검증하는 데 사용하는 라이브러리를 작성하여 지원합니다. 우리는 쿼리가 예상 값과 일치한다고 주장한 테스트를 받았으며, 이는 Oracle이 아닌 대소 문자를 중요하게 만들고 예상 값과 완전히 일치하는 한 유효하지 않은 쿼리를 적절하게 승인했습니다.
대신 내 라이브러리는 Antlr과 Oracle 12c 구문을 사용하여 쿼리를 구문 분석 한 다음 구문 트리 자체에서 다양한 어설 션을 래핑합니다. 예를 들어, 유효하고 (구문 분석 오류가 발생하지 않았 음) 모든 매개 변수가 매개 변수 콜렉션에 의해 충족되며 데이터 리더가 읽은 모든 예상 열이 쿼리에 존재합니다. 다양한 시간에 생산.
동료 엔지니어 중 한 명이 월요일에 주말에 실패했거나 실패했을 때 성공한 쿼리를 보냈습니다. 내 라이브러리는 구문이 훌륭하다고 말했지만 서버가 구문을 실행하려고 할 때 폭발했습니다. 그리고 그가 그 질문을 보았을 때, 이유가 분명했습니다.
UPDATE my_table(
SET column_1 = 'MyValue'
WHERE id_column = 123;
프로젝트를로드 하고이 쿼리가 유효하지 않아야한다고 주장하는 단위 테스트를 추가했습니다. 분명히 테스트는 실패했습니다.
다음으로, 실패한 테스트를 디버깅하고 예외를 발생시킬 것으로 예상되는 코드를 단계별로 살펴 보았 으며 Antlr 이 이전 코드가 예상 한 방식이 아니라 열린 paren에서 오류를 발생시키는 것으로 나타났습니다 . 코드를 수정하고 테스트가 이제 친환경 (통과)하고 프로세스에서 중단되고 커밋되고 푸시 된 다른 사람이 없음을 확인했습니다.
이 작업은 20 분 정도 걸렸으며이 과정에서 이전에는 무시했던 전체 범위의 오류를 지원했기 때문에 실제로 라이브러리를 크게 개선했습니다. 라이브러리에 대한 단위 테스트가 없다면 문제를 조사하고 수정하는 데 몇 시간이 걸릴 수 있습니다.