2012-08-02 2 views
14

PHPSpec 테스트에서 적용 범위 보고서를 생성하는 방법을 아는 사람이 있습니까?PHPSpec 및 적용 범위 보고서

나는 xdebug에 대해 생각했지만, 내가 아는 한 젠킨스에 대한 보고서를 생성 할 수 없다.

답변

38

코드 커버리지를 아직 지원하지 않습니다 (1.4.0). 이것에 대한 귀하의 의견을 듣고 기쁘게 생각합니다. 아래는 코드 커버리지에 대한 제 의견입니다.

PHPSpec은 BDD 프레임 워크입니다. BDD를하고 있다면 수업을 시작하기 전에 수업의 행동을 설명하십시오. 그렇게하면 수업의 관련 행동이 모두 "시험"으로 올바르게 다뤄질 것입니다.

코드 커버리지 도구 및 메트릭은 레거시 코드 (사양/테스트없이 작성한 코드)에 유용합니다. 그런 도구를 사용하여 TDD를 계속 진행하고 회귀로부터 보호받을 수있는 이점을 얻으려고 시도 할 수 있습니다.

일반적으로 접근법은 이 아니며 실제로는이 행동 첫 번째 (TDD)를 설명하는 것만큼 효과적이지 않습니다. 단일 메소드는 둘 이상의 필수 동작에 응답 할만큼 간단 할 수 있습니다. TDDing 할 때 프로세스에서 리팩토링을 유지하고 불필요한 코드를 삭제한다는 것을 알고 있습니다. 결국 코드를 ​​이해하는 데 유용한 모든 필요한 동작을 설명하는 동일한 코드 행을 10 개의 사양 (테스트)으로 끝내게됩니다.

"test"라는 단어의 문제점 중 하나는 사람들이 TDD가 검증에 관한 것이라고 생각하게하는 것입니다. 그렇지 않습니다. 그것은 의사 소통에 관한 것입니다. StoryBDD는 이해 관계자 간의 의사 소통이며 SpecBDD는 클래스 간의 의사 소통입니다. 간단하고, 생생하며, 충분한 문서.

코드를 테스트 한 결과를 보장하기위한 코드 적용 범위는 실수로 잘못 계산 한 것입니다. 불행히도 사람들은 테스트 구조가 테스트 동작보다 더 중요하다고 생각합니다. BDD가 탄생 한 덕분에 초점을 올바른 방향으로 되돌릴 수 있습니다. 이 코드 부분이 테스트를 거쳤다는 것을 확인하는 것은 가짜입니다. 왜냐하면 코드 부분이 두 가지 이상을 수행 할 수 있기 때문입니다. 정교하게 리팩토링해야합니다. 또한 접근 자, 수식어 및 생성자 등의 테스트를 끝내게됩니다.

하지만이 커뮤니티에 대한 의견을 듣고 자합니다. 코드 커버리지가 어디에 유용 할 수 있는지 확인할 수 있습니다. Sebastian Bergmann이 PHPUnit을 멋지게 모듈화했기 때문에 PHPSpec에서 다시 사용할 수있었습니다. 나는 당신이 당신의 specs를 첫째로 썼다는 것을 선호 할 것입니다. 관련 행동에 대해 무료로 100 % 코드 커버리지를 제공합니다. 내 견해로는 그것이 가장 중요한 부분입니다.

+1

당신의 관심이 더 많은 사람은 나를 위해 매우 소중합니다.팀에 BDD를 포함하기 시작 했으므로 올바른 작업을 수행하고 유용한 통계를 수집하는 데 많은 신경을 씁니다. – spamec

+0

새로운 프로젝트에 대한 훌륭한 접근 방법이지만 기존 레거시 프로젝트에 BDD를 구현하려면 어떻게해야합니까? 이 경험이 있습니까? 기존 코드에 대해 Spec을 작성하는 데 의미가 있습니까? 오래된 코드에 대한 제 생각에는 새로운 하나의 스펙에 대한 유닛 테스트가 있어야합니다. –

+1

위대한 답변 Marcello. 그래도 코드 커버리지는 안심하고 믿음을줍니다. :) –

6

코드 커버리지 생성기는 테스트되지 않은 코드를 알 수 있으므로 BDD 스타일 테스트를 거치고있는 레거시 시스템에 유용 할 것이라고 생각합니다. 나는 PHPSpec에서 그런 특징을 고맙게 여길 것이다.

8

클로버를 생성하려면 Code Coverage extension to PHPSpec을 사용하십시오.

PHPSpec 및 다른 도구 (예 : PHPUnit)의 적용 범위 데이터를 병합하려면 병합 모드에서 phpcov 도구와 함께 PHP_CodeCoverage 출력 형식을 사용하십시오.

예 : Jenkins을 등에

# phpspec.yml 
extensions: 
    - PhpSpec\Extension\CodeCoverageExtension 

code_coverage: 
    output: /tmp/coverage/phpspec.phpcoverage 
    format: php 

# phpunit.xml 
<logging> 
    <log type="coverage-php" target="/tmp/coverage/phpunit.phpcoverage" /> 
</logging> 

# from the command line 
phpcov merge --clover coverage.xml /tmp/coverage 
최종 클로버 형식으로 두 도구 모두에서 당신에게 혜택을 줄 것이다

적합.

관련 문제