2014-12-06 15 views
7

Câu hỏi: Tại sao PHPUnit xuất hiện để chạy ở chế độ nghiêm ngặt?PHPUnit - Tại sao PHPUnit xuất hiện để chạy ở chế độ nghiêm ngặt?

Vấn đề:

PHPUnit 4.3.1 bởi Sebastian Bergmann.

Cấu hình đọc từ /full/path/to/configuration.xml

R

Thời gian: 2,65 giây, Bộ nhớ: 11.50Mb

kiểm tra OK, nhưng không đầy đủ, bỏ qua, hoặc rủi ro! Các xét nghiệm: 1, Các xác nhận: 1, Rủi ro: 1. Xong.

Ngoài ra:

Risky Kiểm tra: Mã kiểm tra hoặc mã thử nghiệm đã không (chỉ) đóng riêng đầu ra bộ đệm của nó

My PHP Version là 5.4.

Như đã nêu trong tài liệu (https://phpunit.de/manual/current/en/strict-mode.html) điều này chỉ xuất hiện để áp dụng cho cài đặt chế độ nghiêm ngặt của PHPUnits.

PHPUnit có thể thực hiện kiểm tra bổ sung trong khi thực hiện kiểm tra. Trong ngoài việc kiểm soát chi tiết các chế độ nghiêm ngặt khác nhau kiểm tra (xem bên dưới), bạn có thể sử dụng tùy chọn dòng lệnh nghiêm ngặt hoặc đặt strict = "true" trong tệp cấu hình XML của PHPUnit để cho phép tất cả chúng.

-

Output Trong thử nghiệm Thực hiện

PHPUnit có thể nghiêm ngặt về sản lượng trong các bài kiểm tra. Kiểm tra này có thể được kích hoạt bằng cách sử dụng tùy chọn --disallow-test-output trên dòng lệnh hoặc bằng cách đặt beStrictAboutOutputDuringTests = "true" trong tệp cấu hình XML của PHPUnit.

Thử nghiệm phát ra đầu ra, ví dụ bằng cách gọi in trong mã kiểm tra hoặc mã được kiểm tra, sẽ được đánh dấu là nguy hiểm khi séc này được kích hoạt .

Tôi tin rằng mặc dù tôi không kích hoạt chế độ nghiêm ngặt. Dòng lệnh của tôi là "/ usr/bin/php/usr/bin/phpunit - màu --bootstrap /full/path/to/bootstrap.php --configuration /full/path/to/configuration.xml/full/path /to/Test.php ". Tôi cũng đã sử dụng cấu hình như được cung cấp tại "https://phpunit.de/manual/current/en/appendixes.configuration.html".

<phpunit 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.3/phpunit.xsd" 
    backupGlobals="true" 
    backupStaticAttributes="false" 
    cacheTokens="false" 
    colors="false" 
    convertErrorsToExceptions="true" 
    convertNoticesToExceptions="true" 
    convertWarningsToExceptions="true" 
    forceCoversAnnotation="false" 
    mapTestClassNameToCoveredClassName="false" 
    printerClass="PHPUnit_TextUI_ResultPrinter" 
    processIsolation="false" 
    stopOnError="false" 
    stopOnFailure="false" 
    stopOnIncomplete="false" 
    stopOnSkipped="false" 
    testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader" 
    timeoutForSmallTests="1" 
    timeoutForMediumTests="10" 
    timeoutForLargeTests="60" 
    strict="false" 
    verbose="false"> 
</phpunit> 

Tôi đã sử dụng phiên bản ngắn hơn của cấu hình này trước đây đã cung cấp cùng một kết quả.

<phpunit 
    beStrictAboutOutputDuringTests="false" 
    strict="false" 
    colors="false"> 
</phpunit> 
+1

Bạn có muốn giải quyết vấn đề này không? – Patrick

+0

Tôi đã làm theo ý nghĩa của việc đưa ra các vấn đề báo cáo biến mất nhưng không theo ý nghĩa của ý định ban đầu của tôi để làm cho PHPUnit bỏ qua vấn đề. Sự cố xảy ra với thư viện mà tôi đã sử dụng và tôi đã tìm cách khắc phục sự cố ở điểm kết thúc đó: http://help.slimframework.com/discussions/problems/7779-output-buffers-arent-closed-when -using-app-halt –

+0

Tôi đã trả lời cùng một vấn đề này tại đây http://stackoverflow.com/questions/38400305/phpunit-help-needed-about-risky-tests/40242323#40242323 –

Trả lời

6

Nhìn vào các mã có sẵn trên GitHubcó vẻ như rằng bất kể những gì các tài liệu có thể nói, vấn đề đệm đầu ra được kiểm tra và báo cáo luôn.

Vì vậy, các triệu chứng bạn quan sát không có nghĩa là các thử nghiệm chạy ở chế độ strict.

github.com/sebastianbergmann/phpunit/blob/4.3/src/Framework/TestCase.php#L818

// ... 

try { 
    $this->stopOutputBuffering(); 
} catch (PHPUnit_Framework_RiskyTestError $_e) { 
    if (!isset($e)) { 
     $e = $_e; 
    } 
} 

github.com/sebastianbergmann/phpunit/blob/4.3/src/Framework/TestCase.php#L1938-L1946

private function stopOutputBuffering() 
{ 
    if (ob_get_level() != $this->outputBufferingLevel) { 
     while (ob_get_level() > 0) { 
      ob_end_clean(); 
     } 
     throw new PHPUnit_Framework_RiskyTestError(
      'Test code or tested code did not (only) close its own output buffers' 
     ); 
    } 

    // ... 

    $this->outputBufferingActive = false; 
    $this->outputBufferingLevel = ob_get_level(); 
} 

Đặt breakpoint tại dòng trên trong debugger PHPUnit kiểm tra yêu thích của bạn có thể tiết lộ một số phụ thuộc khác (như disallowTestOutput flag ...?)

+1

Điều đó thực sự giải thích vấn đề. Tôi đã sửa vấn đề đệm bên trong thư viện mà tôi đã sử dụng rồi và không gặp phải tình huống tương tự kể từ đó. http://help.slimframework.com/discussions/problems/7779-output-buffers-arent-closed-when-using-app-halt –

+0

@xmojmr, Điều này có nên được coi là lỗi không? – Pacerier

+0

@ Người điều khiển có thể. Tôi không quá quen thuộc với tài liệu của 'phpunit'.Nếu hành vi này mâu thuẫn với những gì tài liệu nói sau đó nó sẽ được coi là một lỗi và như vậy nên được đăng ký trong [theo dõi vấn đề] (https://github.com/sebastianbergmann/phpunit/issues) cùng với 147 vấn đề khác mở – xmojmr

0

Tìm kiếm cơ sở mã của bạn để error_reporting. Có thể bạn đang bật chế độ nghiêm ngặt trong mã của mình. error_reporting(E_NOTICE) đủ để kích hoạt cảnh báo nguy hiểm mà bạn nhận được.

PHPUnit không phải là một nhị phân đặc biệt (tôi sử dụng để có quan niệm sai lầm này), PHP của nó thực thi một số cơ chế bootstrapping chạy mã của bạn. Điều đó có nghĩa là mã của bạn chia sẻ cùng một môi trường mà PHPUnit thực hiện - vì vậy có khả năng là một nơi nào đó trong mã của bạn, bạn có thể đang thiết lập báo cáo lỗi nghiêm ngặt.

+1

Tôi đã tắt e_notice. Vấn đề là với bộ đệm đầu ra. – kylehyde215

0

Từ đầu ra, tôi tin rằng tôi đúng khi giả định rằng bạn chỉ thực hiện một thử nghiệm, vì vậy việc thiết lập - dừng ở mức rủi ro sẽ không thực sự hữu ích ở đây.

Tôi khuyên bạn nên đảm bảo bạn đang đóng bộ đệm đầu ra trong chính mã của mình. Nếu bạn từng sử dụng một cái gì đó như ob_start, hãy chắc chắn rằng bạn gọi ob_end_clean hoặc ob_end_flush trước khi kịch bản của bạn ngừng thực thi.

Suy nghĩ thứ hai, có thể thử truyền cờ -d và -v khi chạy để xem nó có cung cấp thêm thông tin cho bạn hay không.

+1

Bạn có thể [sửa] tất cả bài đăng và nhận xét của mình. Có lẽ bạn nên di chuyển nội dung bình luận vào câu trả lời của bạn và sau đó xóa bình luận. –

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