일부 구체적인 추상 보호 메소드가있는 추상 클래스가 있으며이 추상 클래스에 대한 PHPUnit 테스트가 있습니다.PHPUnit 테스트 하위 클래스가 인터페이스를 준수합니다.
그럼 추상 클래스를 확장하고 추상 보호 된 메소드를 구현하는 클래스가 있습니다.
아이 클래스가 다른 방법으로 추상화 된 보호 된 메소드에서 반환해야하는 것을 반환하는지 테스트하는 가장 현명한 방법이 궁금합니다.
개인/보호 된 메소드를 테스트해서는 안되는 점을 많이 읽었지만, 보호 된 메소드에서 코드 커버리지를 얻기 위해 추상 클래스 테스트에서 많은 테스트를 복제해야하기 때문에이 어색함을 발견했습니다. 많은 mock 객체를 생성하고 메소드를 설정하여 특정 값을 반환합니다.
최종 결과는 다른 클래스와 매우 긴밀하게 결합 된 많은 테스트가됩니다. 클래스를 변경하면 클래스에 대한 테스트가 변경되어야합니다 (완전히 정상입니다). 그런 다음 클래스의 무수한 모의 구현도 변경해야합니다.
하루가 끝날 때 추상 클래스가 작동하면 추상 보호 메소드 구현시 예상 값을 반환하는 한 내 자식 객체도 작동한다는 것을 알게됩니다.
패턴을 간과하고 있는지 궁금합니다.
모든 하위 클래스에서 테스트를 복제하는 것은 하위 클래스가 인터페이스를 올바르게 구현하는지 테스트하는 것보다 좋지 않은 것처럼 보입니다.
나는 당신이 제안한 것을 해왔고 실제로 테스트를 테스트에 포함하거나 필수 코드로 옮겼습니다. 내가 언급 한 것과 같은 이유로 추상 클래스를 테스트합니다. 방금 테스트를 수행하는 코드를 복제 할 필요가 없도록 동일한 테스트 추출을 수행했습니다. 테스트를 통해 PHP 파일을 간단히 REQUIRE() 한 다음 호출하십시오. –
그게 좋습니다. 재사용 가능한 테스트를 분할하지 않는다고 생각하지 않습니다. 나는 이것이 아마도 가장 현명한 방법이라고 생각합니다. – user2045006