그러한 질문에 대답하기 전에 실제로 달성하고자하는 것을 결정해야합니다.
당신은 코드를 작성합니다. 계약이 이행되기를 희망합니다 (즉,해야 할 일을합니다.해야 할 일을 적는 것은 일부 사람들에게는 큰 발전입니다).
코드가 수행해야 할 일을 합리적으로 확신하려면, 코드를 충분히 쳐다 보거나 "코드가 모든 테스트를 통과하면 정확하다"는 사실을 확신 할 수있는 충분한 사례를 테스트하는 테스트 코드를 작성하십시오.
종종 일부 코드의 공개적으로 정의 된 인터페이스에만 관심이 있습니다. 나는 당신의 라이브러리를 사용하는 경우, 나는 그것이 단지, 당신이 그것을 제대로 작동하게하는 방법을 상관하지 않습니다 않는 제대로 일을. 단위 테스트를 수행하여 라이브러리가 올바른지 확인합니다.
그러나 당신은 도서관을 만들고 있습니다. 제대로 작동하려면 달성하기 어려울 수 있습니다. X 작업을 올바르게 수행하는 라이브러리에 대해서만 신경을 쓰므로 X에 대한 단위 테스트가 있습니다. 라이브러리를 생성하는 개발자는 A, B 및 C 단계를 완전히 결합하여 X를 구현합니다. 라이브러리를 작동 시키려면 테스트를 추가하여 A, B 및 C가 각각 올바르게 작동하는지 확인하십시오. 이 테스트를 원합니다. "개인 메소드에 대한 단위 테스트가 없어야한다"고 말하는 것은 의미가 없습니다. 당신은 이러한 개인 방법에 대한 테스트를합니다. 어쩌면 누군가 개인 단위 테스트 방법이 잘못되었다고 말할 수도 있습니다. 그러나 그것은 단지 당신이 그것들을 "단위 테스트"라고 부르지 않고 "개인 테스트"또는 당신이 부르고 싶은 것을 부를 수 있다는 것을 의미합니다.
Swift 언어는 함수에 "testable"속성을 부여하여 테스트하기 때문에 A, B, C를 공개 메소드로 노출하지 않으려는 문제를 해결합니다. 컴파일러를 사용하면 테스트 할 수없는 코드가 아닌 단위 테스트에서 개인 테스트 가능 메소드를 호출 할 수 있습니다.