2012-01-09 31 views
11

Tôi đã cố gắng để echo công cụ trong các bài kiểm tra phpunit của tôi nhưng không có may mắn cho đến nay.echo trong kiểm tra phpunit

Tôi đọc tài liệu về tệp cấu hình xml và dường như thông số debug là những gì tôi đang tìm kiếm. Thật không may nó vẫn không hoạt động. Nhưng dù sao đây là xml file config của tôi:

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit colors="true" 
     processIsolation="true" 
     verbose="true" 
     debug="true"> 
</phpunit> 

Cả processIsolationverbose được chấp nhận nhưng không phải là debug.

Lệnh thực sự hoạt động khá tốt khi tôi trực tiếp vượt qua nó để phpunit như thế này:

phpunit --debug MyTest.php # here stuff is echoed correctly 

nhưng với cấu hình xml nộp nó trông giống như nó được bỏ qua.

Trả lời

15

Phiên bản hiện tại của PHPUnit >3.6.4 (và tất cả các phiên bản 3.5.*) sẽ chỉ in mọi thứ bạn echo trong trường hợp kiểm tra.

<?php 

class OutputTestCase extends PHPUnit_Framework_TestCase { 

    public function testEcho() { 
     echo "Hi"; 
    } 
} 

sản xuất:

phpunit foo.php 
PHPUnit 3.6.7 by Sebastian Bergmann. 

.Hi 

Time: 0 seconds, Memory: 3.25Mb 

OK (1 test, 0 assertions) 

Vì vậy, nếu bạn đang ở trên một phiên bản cũ 3.6 chỉ nâng cấp :)

+2

Tôi đang sử dụng 3.6.3 vì vậy tôi không thể làm điều đó. Bạn đã khởi chạy OutputTestCase như thế nào? Nếu bạn đã khởi chạy nó với phpunit --debug OutputTestCase.php thì có, nó hoạt động nhưng ngược lại thì không. – nourdine

+2

Như tôi đã nói bạn ** cần ** 'phpunit> 3.6.4' để làm việc này. Với 3.6.3 bạn sẽ KHÔNG nhận được kết quả đó mà không cần chạy --debug. Nếu bạn nâng cấp nó sẽ hoạt động như các hành vi trong PHPUnit thay đổi :) – edorian

+7

Đối với những gì nó có giá trị này dường như không làm việc ở tất cả trên phiên bản 4.1, ngay cả với tùy chọn --debug ... –

3

Hãy chắc chắn rằng bạn không gọi exit() hoặc giết(). PHPUnit đệm các câu lệnh echo và bộ đệm đó sẽ bị mất mà không có đầu ra nếu kịch bản của bạn thoát trong khi thử nghiệm.

1

processIsolation đang chặn kết quả thử nghiệm để bạn phải tắt nó. Sự tương tác với debug cờ có lẽ là một sự giám sát giới thiệu với điều này: https://github.com/sebastianbergmann/phpunit/pull/1489

+2

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ review/low-quality-posts/13915236) – Serjik

+0

Tôi không hiểu, ý bạn là gì. Tất cả các thông tin liên quan đều có trong câu trả lời. –

+0

nhìn vào câu trả lời được chấp nhận, nó được mô tả đầy đủ và ví dụ, khán giả của bạn là toàn bộ vũ trụ không chỉ là người hỏi câu hỏi – Serjik

0

Trong trường hợp thử nghiệm của bạn mất nhiều thời gian và bạn muốn nhìn thấy đầu ra trong quá trình này, thêm các phương pháp sau đây để kiểm tra lớp của bạn:

protected function prontoPrint($whatever = 'I am printed!') 
{ 
    // if output buffer has not started yet 
    if (ob_get_level() == 0) { 
     // current buffer existence 
     $hasBuffer = false; 
     // start the buffer 
     ob_start(); 
    } else { 
     // current buffer existence 
     $hasBuffer = true; 
    } 

    // echo to output 
    echo $whatever; 

    // flush current buffer to output stream 
    ob_flush(); 
    flush(); 
    ob_end_flush(); 

    // if there were a buffer before this method was called 
    //  in my version of PHPUNIT it has its own buffer running 
    if ($hasBuffer) { 
     // start the output buffer again 
     ob_start(); 
    } 
} 

Bây giờ bất cứ khi nào bạn gọi $this->prontoPrint($variable) bên trong lớp thử nghiệm, nó sẽ ngay lập tức hiển thị văn bản trong bảng điều khiển. Tôi đã sử dụng số này php.net comment để viết hàm.

PHPUnit 5.7.21PHP 5.6.31 with Xdebug 2.5.5

+0

bằng cách nào đó giải pháp này không dọn dẹp bộ đệm đã sử dụng - có lẽ bạn có thể viết lại nó để tránh thông báo này: 'Mã thử nghiệm hoặc mã thử nghiệm không (chỉ) đóng bộ đệm đầu ra của riêng nó ' – serup

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