자동 테스트의 한 가지 점은 테스트 할 수있는 코드를 작성해야한다는 것입니다. 이것은 그 자체로는 나쁜 것이 아니며 (실제로 피해야하는 많은 관행을 권장하지 않기 때문에 좋습니다.) 기존 코드에 단위 테스트를 적용하려고하면 기회가 아닙니다. 테스트 가능한 방식으로 작성되었습니다.
싱글 톤, 정적 메소드, 레지스트리, 서비스 로케이터 등과 같은 것들에는 매우 조롱하기 어려운 종속성이 도입됩니다. 데 메타 법칙을 위반하면 코드베이스의 너무 많은 부분이 코드베이스의 다른 부분이 어떻게 작동하는지에 대해 너무 많이 알고있어 깨지기 어려운 숨겨진 종속성을 추가로 발생시킵니다. 이러한 모든 것들은 모듈을 나머지 코드베이스로부터 분리하는 것을 어렵게 만들고, 모듈을 독립적으로 테스트 할 수 없다면 단위 테스트는 많은 가치를 잃게됩니다. 테스트에 실패하면 테스트 대상 장치의 결함 또는 종속 항목 중 하나의 결함으로 인한 것이거나 종속 데이터 소스를 통해 가져온 데이터가 테스트 작성자가 예상 한 것이 아니기 때문입니다. ? 할 수 있다면
단위 테스트를 염두에두고 구축되지 않은 것으로 보이는 대부분의 코드베이스는 본질적으로 테스트 할 수없는 경향이 있습니다. . 단위 테스트를 염두에두고 작성된 코드는 매우 다르게 보입니다.
많은 사람들이 처음으로 단위 테스트를 시작할 때 단위 테스트에 순진한 접근 방식을 취합니다. 기존 코드베이스에 대해 많은 테스트를 작성할 수 있으며 모든 것이 좋을 것이라고 생각하지만 결코 그렇게하지 않습니다. 위에서 언급 한 문제. 그들은 단위 테스트에서 많은 양의 설정을 조정해야한다는 사실을 발견하기 시작했으며 코드에서 분리가 부족하면 테스트 실패의 원인을 추적 할 수 없기 때문에 결과에 의문이 생길 수 있습니다. 또한 시스템 작동 방식에 대한 매우 추상적 인 측면을 보여주는 "영리한"테스트 작성을 시작하는 경향이 있습니다. "영리한"단위 테스트 자체가 잠재적 인 버그 소스이기 때문에 이것은 실패하는 경향이 있습니다. 테스트 한 모듈의 버그로 인해 테스트가 실패 했습니까? 또는 테스트 버그로 인해? 테스트는 매우 흥미롭고 간단해야 버그가 숨겨 질 가능성이 없습니다. 실제로 가장 좋은 테스트는 2 줄을 넘지 않으며, 첫 번째 줄은 테스트 대상 유닛에게 무언가를하도록 지시하는 것이고, 두 번째 줄은 그것이 무엇을했는지 예상 한 것이라고 주장합니다.
팀에서 단위 테스트 채택을 진지하게 고려한다면 기존 프로젝트를 시작하는 것이 현명하지 않습니다. 팀의 기존 프로젝트는 주요 리팩터링 없이는 테스트 할 수 없습니다. 깨끗한 슬레이트가 있으므로 단위 테스트에 대한 학습의 기초로 새 프로젝트를 사용하는 것이 좋습니다. 싱글 톤, 레지스트리 및 기타 숨겨진 종속성에 대한 종속성 주입을 선호하도록 새 코드 기반을 설계 할 수 있으며 구현 대신 인터페이스에 의존하도록 작성할 수 있습니다. 또한 테스트 후 코드를 작성하는 것이 아니라 테스트 된 모듈이 수행하는 것이 아니라 테스트 된 모듈이 의도 한대로 작동하는지 확인하는 단위 테스트를 수행하므로 테스트 할 코드와 함께 테스트를 작성할 수도 있습니다. 사양에서해야 할 일
단위 테스트에 대해 어느 정도 확신을 갖게되면 팀은 기존 코드의 단위 테스트에 장애가 될 결함을 깨닫기 시작할 것입니다. 이때 기존 코드를 리팩토링하여 더 테스트 가능하게 만들 수 있습니다. 야심 차지 말고 한 번에이 작업을 시도하거나 완전히 새로운 시스템으로 교체하려는 시스템을 시도해보십시오. 쉽게 테스트 할 수있는 코드베이스의 비트 (찾을 수없는 비트)를 찾기 만하면됩니다. 모든 종속성 또는 종속성이 분명한 경우) 및 해당 테스트를 작성하십시오. 코드와 함께 테스트를 작성하는 것이 나중에 테스트를 작성하는 것이 바람직하지만 나중에 작성된 테스트조차도 여전히 시작점으로 가치가 있다고 말했습니다. 클래스가 스펙이 말한 것 이외의 작동 방식에 대해 아는 것처럼 테스트를 작성하십시오. 테스트를 실행하고 실패하면 스펙 또는 구현이 잘못되었습니다. 둘 중 하나를 잘못 확인하여 테스트 또는 코드를 적절히 업데이트하십시오.
낮은 매달린 과일을 골라 내면 실제 작업이 시작됩니다. 코드베이스에서 숨겨진 종속성을 찾아서 한 번에 하나씩 수정해야합니다. 이 시점에서 지나치게 야심 차지 말고, 테스트의 장애물이 해결되고 다음 비트로 넘어갈 때까지 한 번에 하나의 모듈을 수행하거나 한 모듈에서 하나의 단일 문제를 고수하십시오.
TL : DR : 대부분의 사람들은 테스트가 쉽다고 생각하고 테스트를 기존 코드에 쉽게 개조 할 수 있습니다. 이러한 가정은 모두 틀렸다. 이 두 가지 사실을 모두 고려하여 프로젝트에 단위 테스트를 받기 위해 프로젝트를 시작하면 성공할 가능성이 높습니다.