2012-08-02 51 views
14

Có ai biết phương pháp tạo báo cáo bảo hiểm từ các thử nghiệm PHPSpec không?PHPSpec và báo cáo bảo hiểm

Tôi nghĩ về xdebug, nhưng theo như tôi biết nó không thể tạo báo cáo cho jenkins.

Trả lời

38

Vì nó đứng (1.4.0), nó chưa hỗ trợ bảo hiểm mã. Rất vui khi được nghe phản hồi của bạn về điều này. Dưới đây là ý kiến ​​của tôi về phạm vi mã.

PHPSpec là khuôn khổ BDD. Nếu bạn đang làm BDD, bạn sẽ mô tả hành vi của lớp học của bạn trước khi viết lớp học của bạn. Nếu bạn đã làm theo cách đó, hành vi có liên quan của các lớp học của bạn sẽ được bao phủ đúng với "kiểm tra".

Công cụ và chỉ số phạm vi mã rất hữu ích cho mã cũ (mã bạn đã viết không có thông số kỹ thuật/kiểm tra). Bạn có thể sử dụng một công cụ như vậy để thử và nhận được đến một điểm mà bạn có thể tiếp tục TDD và có lợi ích của việc được bảo vệ khỏi hồi quy.

Nói chung, cách tiếp cận không phải là thực sự có hiệu quả như mô tả hành vi đầu tiên (TDD). Một phương pháp đơn giản có thể đủ đơn giản để đáp ứng với nhiều hơn một hành vi bắt buộc. Bạn biết rằng khi bạn đang TDDing, bạn tiếp tục tái cấu trúc trong quá trình, xóa mã không cần thiết. Bạn kết thúc với 10 thông số kỹ thuật (kiểm tra) đánh cùng một dòng mã, tất cả mô tả hành vi cần thiết khác nhau, tất cả đều hữu ích để hiểu mã.

Một trong những vấn đề với từ "kiểm tra" là nó khiến mọi người nghĩ rằng TDD là về xác minh. Nó không phải. Đó là về giao tiếp. StoryBDD là sự giao tiếp giữa các bên liên quan và SpecBDD là sự giao tiếp giữa các lớp. Đơn giản, sống, chỉ đủ tài liệu.

Bảo hiểm mã được thực hiện để đảm bảo bạn đã kiểm tra mã của mình là sai lầm, một chỉ số kém nhất. Thật không may mọi người nghĩ rằng cấu trúc thử nghiệm là quan trọng hơn so với hành vi thử nghiệm. Đó là lý do tại sao BDD được sinh ra, để giúp tập trung trở lại đúng hướng. Đảm bảo rằng phần này của mã được kiểm tra là giả mạo vì phần mã đó có thể làm nhiều hơn một thứ, nó nên, nếu nó được tái cấu trúc độc đáo. Ngoài ra, bạn sẽ kết thúc thử nghiệm các công cụ như accessors và modifiers và constructors, v.v.

Nhưng tôi mở để nghe cộng đồng về điều này. Tôi có thể thấy Mã Bảo hiểm có thể hữu ích ở đâu. Thêm vào đó, vì Sebastian Bergmann đã độc đáo mô đun hóa nó ra khỏi PHPUnit nên tôi có thể tái sử dụng nó trong PHPSpec. Tôi muốn bạn đã viết thông số kỹ thuật của bạn đầu tiên. Bạn nhận được 100% mã vùng phủ sóng của hành vi liên quan của bạn miễn phí. Theo quan điểm của tôi, đó là những gì quan trọng đối với hầu hết các phần.

+1

Aproach của bạn là người có nhiều kinh nghiệm hơn rất có giá trị đối với tôi.Tôi bắt đầu kết hợp BDD vào nhóm của mình, đó là lý do tại sao tôi rất quan tâm đến việc làm đúng và thu thập số liệu thống kê hữu ích :) – spamec

+0

Đó là cách tiếp cận tuyệt vời cho các dự án mới, nhưng nếu chúng tôi muốn triển khai BDD trong dự án cũ? Bạn có kinh nghiệm gì về điều này không? Có bất kỳ ý nghĩa để viết Spec cho mã hiện tại? Theo ý kiến ​​của tôi cho mã cũ nên có đơn vị kiểm tra cho một số kỹ thuật mới. –

+1

Câu trả lời tuyệt vời Marcello. Tuy nhiên, bảo hiểm mã cho phép bảo đảm, niềm tin nơi nó thiếu :) –

6

Tôi nghĩ rằng trình tạo mã bảo hiểm sẽ hữu ích cho các hệ thống cũ đang trong quá trình thử nghiệm kiểu BDD vì bạn có thể biết mã nào không được kiểm tra. Tôi cho một người sẽ đánh giá cao một tính năng như vậy trong PHPSpec.

8

Sử dụng Code Coverage extension to PHPSpec để tạo cỏ ba lá.

Nếu bạn muốn hợp nhất dữ liệu bảo hiểm từ PHPSpec và các công cụ khác (ví dụ) PHPUnit, sau đó sử dụng định dạng đầu ra PHP_CodeCoverage với công cụ phpcov trong chế độ hợp nhất.

Ví dụ:

# 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 

Điều đó sẽ cung cấp cho bạn bảo hiểm từ cả hai công cụ trong một định dạng clover thức, thích hợp cho như Jenkins.

Các vấn đề liên quan