일반적으로 코드 테스트는 쉽지 않습니다. 만약 그렇다면, 우리는 오래 전에 그것을 해왔으며, 지난 10-15 년 동안 만 그렇게 많은 거래를하지 않았을 것입니다. 가장 큰 어려움 중 하나는 캡슐화를 깨지 않고 응집력 있고 잘 팩토링되고 테스트 가능한 코드를 테스트하는 방법을 결정하는 데 항상 어려움이있었습니다. BDD 교장은 우리가 행동에 거의 전적으로 초점을 맞출 것을 제안하고, 어떤면에서는 내부 세부 사항에 대해 크게 걱정할 필요가 없다고 제안하는 것처럼 보이지만 종종 이것이 있다면 테스트하기가 매우 어려울 수 있습니다 테스트의 전체적인 복잡성을 증가 시켜서 모든 가능한 결과를보다 공공 수준에서 처리 할 수 있기 때문에 매우 숨겨진 방식으로 "물건"을 수행하는 많은 개인용 메소드.
조롱은 어느 정도 도움이 될 수 있지만 다시 외부 적으로 집중되어 있습니다. Dependency Injection은 모의 또는 테스트 복식으로 다시 잘 작동 할 수 있지만 인터페이스를 통해 또는 직접 숨기고 선호하는 요소를 직접 노출해야 할 수도 있습니다. 시스템 내 특정 클래스에 대한 편집증 수준의 보안을 유지하십시오.
나를 위해, 배심원은 클래스를 더 쉽게 테스트 할 수 있도록 디자인할지 여부에 대해 여전히 고민 중입니다. 레거시 코드를 유지하면서 새로운 테스트를 제공해야하는 경우 문제가 발생할 수 있습니다. 나는 당신이 시스템의 모든 것을 절대적으로 테스트 할 수 있어야한다는 것을 인정하지만, 클래스의 개인 내부를 간접적으로 노출시키는 아이디어는 마음에 들지 않으므로 테스트를 작성할 수 있습니다.
나에게 해결책은 항상 상당히 실용적인 접근 방식을 취하고 각 특정 상황에 맞게 여러 가지 기술을 결합하는 것이 었습니다. 내 테스트의 내부 속성과 동작을 노출시키기 위해 상속 된 많은 테스트 복식을 사용합니다. 수업에 첨부 할 수있는 모든 것을 조롱하고 수업의 보안을 훼손하지 않는 경우 테스트 목적으로 행동을 무시하거나 주입하는 방법을 제공합니다. 코드 테스트 기능을 향상시키는 데 도움이된다면 더 이벤트 중심 인터페이스를 제공하는 것을 고려할 것입니다.
"가장 알아볼 수없는" 코드를 발견하면 리팩토링을 통해 테스트 할 수 있는지 확인합니다. 씬 뒤에 숨어있는 많은 개인 코드가있는 경우 종종 새로운 클래스가 깨지기를 기다리고 있습니다. 이러한 클래스는 내부적으로 사용될 수 있지만 개인 행동이 적고 액세스 및 복잡성이 낮은 계층으로 독립적으로 테스트 될 수 있습니다. 그러나 피해야 할 한 가지 사항은 테스트 코드가 내장 된 프로덕션 코드를 작성하는 것입니다. 테스트 공포가 if testing then ...
완전히 해체되지 않고 불완전하게 해결되지 않았 음을 나타내는 " 러그 " 를 생성하는 유혹이있을 수 있습니다 .
Gerard Meszaros의 xUnit Test Patterns 책 을 읽는 것이 도움이 될 것 입니다.이 책은 내가 여기에 갈 수있는 것보다 훨씬 더 자세한 내용을 다룹니다. 아마 그가 제안한 모든 것을하지는 않겠지 만, 다루기 어려운 까다로운 테스트 상황을 명확히하는 데 도움이됩니다. 하루가 끝나면 선호하는 디자인을 적용하면서 테스트 요구 사항을 충족 할 수 있기를 원하며 타협해야 할 위치를 더 잘 결정하기 위해 모든 옵션을 더 잘 이해하는 데 도움이됩니다.