2011-03-02 6 views
0

나는 현재 디자인 패턴을 기반으로 만든 사용자 정의 클래스의 단위 테스트를하고 있습니다. 코드 커버리지 보고서에 따르면 나는 그것의 95.45 %를 다룹니다. 나는 단위 테스트를 수행하기 위해 PHPUnit을 사용하고 있으며, this article 에 의해 Sebastian Bergmann에 의해 수행되었습니다.단위 테스트 싱글 톤 패턴 메서드 __clone() in PHP

유일한 문제는 마법 방법 __clone()을 통한 클래스 복제에 대한 테스트입니다. 나는 싱글은 "복제 가능한"가 아닌지 확인하기 위해 테스트를 작성하는 가장 좋은 방법이 될 것입니다 무엇

private final function __clone() 
{} 

인스턴스

을 피하기 위해 비공개로 그 방법을 설정했습니다. (같은 테스트를 통해 결국 __constructor()을 테스트 할 수 있습니다.)

질문은 없지만 단지 테스트 나 테스트가 * nix 상자에 비해 느리게 실행됩니다.

답변

1

복제 또는 생성자를 호출하고 예외가 발생했는지 확인하십시오.

+0

reflextion 클래스와 try/catch를 사용하여 작동했습니다. –

3

코드 커버리지는 프로그램의 정확성에 대한 척도가 아니며 모든 코드 경로를 100 % 적용한다는 의미는 아닙니다. 예를 들어, 원 오퍼레이터

a ? b : c 

및 화합물 부울

if (a < 1 || b > 6) 

는 인한 단락에의 일부만을 실행할 수 있더라도 단일 구문으로 계산되는 표현. 또한 단일 명령문 if, while 등 블록 주위의 중괄호를 생략하면 전체 내용이 단일 명령문으로 바뀝니다.

코드 커버리지 보고서에 다음 내용이 하나의 성명으로 표시되므로 두 사례 (truefalse)를 모두 실행했는지 알 수 없습니다.

if (...) 
    foo(); 

나는

private final function __clone() { } 

실패 너무 간단하다고 생각합니다. 메소드가 예외를 throw한다는 것을 테스트합니다 (클라이언트가하지 않을 리플렉션을 사용하여). PHP 인터프리터를 테스트하고 있습니다. 제 책의 범위를 벗어납니다.

[이 100 %의 코드 커버리지에 도달하지만, 마음에 위의 사실을 유지하는 것은 그것을 완화하는 데 도움이 그래서 더 나은 코드를 작성하기로 넘어 올 때 기록을 위해, 내가 너무 조금 OC를 얻을.]

+0

이런 것들을 지적 해 주셔서 감사합니다. 나는 단위 테스트의 "두 번째 계층"에서 코드 커버리지를 사용합니다. 먼저 테스트 된 각 경로로 덮여있는 가능한 모든 케이스를 얻으려고 시도하고 마침내 코드 커버리지를 확인합니다. 코드 커버리지는 쓸데없는 코드를 나타낼 수 있습니다.). –