2011-04-20 4 views
4

사이트에서 코드 커버리지를 확인하는 중에 문제가 발생했습니다. 우리의 세 가지 애플 리케이션에 우리의 단위 테스트를 실행하는 동안 PHPUnit html 코드 범위 보고서를 생성해야합니다. Google에는 공개 앱, 관리 앱 및보고 앱이 있습니다. 나는 어떻게 든 애플 리케이션 코드를 공유하기 때문에 이것을 하나의 코드 커버리지 보고서에 결합하고 싶습니다.PHPUnit의 코드 커버리지

코드 커버리지는 테스트에서 "터치"하는 파일의 범위 만 계산하므로 완전히 테스트되지 않은 파일이 계산에 사용되지 않는 것으로 보입니다. 누구든지 계산에 이러한 사용되지 않는 파일을 가져 오는 방법을 알고 있습니까? 특정 디렉토리를 사용하여 계산하도록 커버리지 생성기에 지시하여 터치되지 않은 파일을 가져 오는 방법이 있습니까? phpunit에 대한 설정 파일에 화이트리스트를 설정하여 프로젝트의 루트로 설정했습니다. 모든 의견, 답변 및 조언을 환영합니다.

+1

확실한 대답은 손길이 닿지 않은 파일을 호출 테스트를 기록이다. –

+0

사실입니다. 그러나 목표를 설정하기 위해 상대적으로 정확한 코드 적용 범위를 얻고 싶으므로이를 피하려고합니다. PHPUnit 문서 온라인에서는 이러한 파일을 허용 목록에 추가하면 해당 파일이 포함될 것이라는 인상을주는 것처럼 보이지만 너무 확신하지 못합니다. – Dave

+0

정말로 질문을 이해하는지 모르지만 코드 커버리지 보고서에 손대지 않은 파일을 포함시키고 싶은 이유는 무엇입니까? 예 : testX를 실행하는 동안 아무 일도하지 않는 (따라서 손대지 않은) 스크립트 A가있는 경우 왜 스크립트 A가 코드 커버리지 보고서에 포함되어야합니까 ??? –

답변

4

phpunit.xml 구성 파일에 <whitelist>을 설정 한 경우 이어야합니다. 적용되지 않는 모든 파일을 참조하십시오. 그것은 pathes에 문제가 될 수도 있습니다, 그것은 어떤 파일에 대한 0 %의 범위를 생성하고 다음 상대 경로를 작동하도록 볼 절대적으로 노력하십시오.

내가 알고있는 phpunit으로 할 수있는 일은 많지 않습니다. 커버리지 결과 (PHPUnit_Coverage 패키지)를 손으로 결합한 다음 렌더링하는 방법을 파악할 수 있지만 수동으로 수행해야합니다. 적어도 나는 당신을 위해 그렇게하는 프로젝트/도구/방법을 모른다.

가장 쉬운 방법은 하나의 phpunit을 실행하여 3 개의 testuites를 모두 실행하고 현재있는 부분에 대한 코드 적용 범위를 생성하는 것입니다.

+0

그래, 문제는 3 개의 개별 앱이 실행된다는 것입니다. 따라서 3 개의 별도 phpunit 호출이 필요합니다. 화이트리스트에 대한 정보를 주셔서 감사합니다. 내 경로를 다시 확인하겠습니다. – Dave

+0

그리고 왜 당신은 하나의 PHP 프로세스에서 모든 세 가지 애플 리케이션을 실행할 수 있습니까? – edorian

+0

우리는 phpunit-admin을 사용하여 admin 앱을 실행합니다. phpunit-reporting은 Google의보고 앱입니다. – Dave

-1

PHPUnit은 XDebug를 사용합니다. XDebug는 실제 실행되는 파일에 대해 문자 그대로 범위 데이터를 제공합니다. 디버거는 결코 실행되지 않는 파일에 대한 데이터를 제공 할 수 없습니다. PHPUnit 기계를 손으로 패치하여 XDebug에서 반환 한 결과에 응용 프로그램에 있다고 생각되는 모든 파일 목록을 추가 할 수 있습니다.

PHP Test Coverage tool은 다르게 작동합니다. 이 응용 프로그램의 일부라고 생각하는 모든 파일의 목록을 제공합니다. 이 목록을 작성하는 데 도움이됩니다. (이것은 첫 번째 해결 방안에 패치를 적용해야하는 동일한 목록입니다.) 그것은 모두 파일을 계측하고 테스트 적용 범위 데이터를 수집합니다. 현재 얻은 적용 범위 데이터에는 모든 항목이 올바르게 포함됩니다. 그것은 PHPUnit과 잘 작동합니다.

더 이상 갈 수 있습니다. "분리 된"응용 프로그램 각각에 대한 테스트 적용 범위를 작성하고 별도로 실행할 수 있습니다. 그런 다음 모든 세트에 대한 적용 범위 데이터를 결합하여 전체 세트에 대한 적용 범위를 볼 수 있습니다.

+0

정보 주셔서 감사합니다! – Dave

+3

PHPUnit은 커버리지 리포트에서 실행되지 않는 코드 목록을 지원합니다. phpunit.xml의 화이트리스트에 코드를 추가하기 만하면됩니다. FUD 확산을 멈 춥니 다. – cweiske

-1

미친 소리 일지 모르지만 프로젝트 폴더를 반복적으로 반복하는 루프를 생성하고 찾은 모든 파일에서 require_once를 실행하는 테스트 사례를 만드는 것이 가장 좋은 이유는 무엇입니까? XDebug는 필요한 각 파일에 대해 새로운 코드 적용 html 파일을 만들 수 있어야합니다.

+0

브 루트 포스! 이게 실제로 작동할까요? 만약 그렇다면, 나는 좀 덜 "해킹 된"것을 찾아 낼 때까지 빠른 수정이 될 것입니다. 감사합니다 제임스! – Dave

+0

또한 symfony 프레임 워크를 사용하고 있으며 현재 테스트중인 일부 작업에는 중복 된 이름이 있습니다. (예 : listAction) Google은 사이트와 관련된 몇 가지 문제를 피하기 위해 사이트에서 사용하는 클래스 이름 맹 글링기를 사용합니다. 파일 이름이 같으면 require_once를 실행하면 오류가 발생하지 않습니까? – Dave

+0

다른 디렉토리에서 같은 이름이 문제가되지 않습니다. –

0

나는 동일한 문제에 직면했으며 테스트 스위트를 실행하기 전에 모든 클래스와 공용 메소드에 대해 테스트 스텁 생성을 추가했다. 당신은 phpunit을에 그 심지어 옵션이 있습니다 :

http://www.phpunit.de/manual/current/en/skeleton-generator.html

+0

스켈레톤 코드를 생성 할 수있는 PHPUnit에 대해 알지 못했습니다! 고마워! 코드 공유 앱 문제와 별도의 코드 커버리지 보고서 생성 문제는 계속됩니다. – Dave

+0

@Dave Dohr : 하나의 스크립트에서 3 개의 스위트 룸을 실행하고 PHP_CodeCoverage :: merge()를 사용하여 해당 인스턴스의 데이터를 결합한 다음 HTML/클로버 보고서를 생성해야합니다. –

+0

크루즈 컨트롤이있는 개미 스크립트로 스위트를 실행하고 있습니다. 이 일을 어떻게 하죠? GoToled PHP_CodeCoverage :: merge()는 아무 소용이 없습니다. – Dave

2

사용 <whitelist processUncoveredFilesFromWhitelist="true">과 같이 :

<filter> 
    <whitelist processUncoveredFilesFromWhitelist="true"> 
    <directory suffix=".php">../folder/</directory> 
    </whitelist> 
</filter> 
관련 문제