2010-10-12 31 views

Trả lời

21

Tôi nghĩ trong những trường hợp này, nó khá chuẩn để chỉ đơn giản là đánh dấu thử nghiệm là bỏ qua. Các bài kiểm tra của bạn sẽ vẫn chạy và bộ sẽ vượt qua, nhưng nhân viên kiểm tra sẽ cảnh báo bạn về các bài kiểm tra bị bỏ qua.

http://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html

+0

Tôi đoán điều đó sẽ thực hiện. Tôi đã tìm kiếm một cái gì đó giống như sự hỗ trợ cho các khối TODO trong Kiểm tra của Perl :: Thêm mô-đun http://perldoc.perl.org/Test/More.html#Conditional-tests sẽ chạy các thử nghiệm được dự kiến ​​sẽ không thành công và báo cáo nếu họ (bất ngờ) thành công. (PHPUnit dường như chỉ có thể bỏ qua hoàn toàn.) – mjs

+1

Tôi nghĩ rằng Tom B trả lời dưới đây về phương pháp markTestIncomplete là tốt hơn –

+1

Điều đó không làm các trick. Một giải pháp nên đánh dấu kiểm tra là TDD, vì vậy nó sẽ hiển thị 'I' nếu kiểm tra thất bại (như chưa được thực hiện), và quan trọng nhất, nó sẽ thất bại nếu kiểm tra đi vì nó có nghĩa là chúng ta quên xóa nhãn TDD. Tôi không biết làm thế nào để làm các thủ thuật dễ dàng trong phpunit – Alcalyn

1

Nếu bạn muốn có một thử nghiệm thất bại nhưng biết rằng thất bại của nó được mong đợi, bạn có thể add a message to the assertion rằng sẽ ra trong các kết quả:

public function testExpectedToFail() 
{  
    $this->assertTrue(FALSE, 'I knew this would happen!'); 
} 

Trong các kết quả:

There was 1 failure: 

1) testExpectedToFail(ClassTest) 
I knew this would happen! 
+1

Điều này sẽ làm cho bộ phần mềm thất bại, mà dường như không phải là kết quả mong muốn. –

+1

Câu hỏi được đề cập đến TDD, trong đó bạn viết các kiểm tra không thành công đối với mã không tồn tại. –

+1

$ this-> fail ('Tôi biết điều này sẽ xảy ra!'); là viết tắt cho điều đó :). –

8

Tôi thực sự nghĩ rằng đó là một thực tế không tốt, tuy nhiên bạn có thể lừa PHPUnit theo cách này:

/** 
* This test will succeed !!! 
* @expectedException PHPUnit_Framework_ExpectationFailedException 
*/ 
public function testSucceed() 
{ 
    $this->assertTrue(false); 
} 

sạch thêm:

public function testFailingTest() { 
    try { 
     $this->assertTrue(false); 
    } catch (PHPUnit_Framework_ExpectationFailedException $ex) { 
     // As expected the assertion failed, silently return 
     return; 
    } 
    // The assertion did not fail, make the test fail 
    $this->fail('This test did not fail as expected'); 
    } 
+0

Đoạn mã trên hoạt động, nhưng tôi phải bắt 'PHPUnit_Framework_AssertionFailedError', không phải là' PHPUnit_Framework_ExpectationFailedException' –

+1

thực hành tốt nếu bạn thực sự thử nghiệm xác nhận đó là tự, ví dụ testAssertEqual_fail: D để bạn có thể kiểm tra các xác nhận tùy chỉnh của mình không thành công. sử dụng, bạn làm điều gì đó sai – aqm

11

Phương pháp 'đúng' xử lý này là sử dụng $this->markTestIncomplete(). Điều này sẽ đánh dấu thử nghiệm là không đầy đủ. Nó sẽ trở lại như được thông qua, nhưng nó sẽ hiển thị thông điệp được cung cấp. Xem http://www.phpunit.de/manual/3.0/en/incomplete-and-skipped-tests.html để biết thêm thông tin.

+2

Câu hỏi là về TDD, nơi bạn viết (lý tưởng hoàn thành) kiểm tra trước khi mã chính. Tuy nhiên, 'markTestIncomplete' là khi bạn có một" kiểm tra chưa thực hiện "(http://phpunit.de/manual/3.7/en/incomplete-and-skipped-tests.html bắt đầu bằng cách mô tả một phương pháp thử rỗng cho một bài kiểm tra chưa thực hiện , sau đó giải thích cách dẫn đến thành công sai). –

1

Nhận xét bằng sáu mươi chín ở trên gần như hoàn hảo cho những gì tôi đang tìm kiếm.

Phương thức fail() hữu ích khi bạn đặt kiểm tra cho một ngoại lệ dự kiến ​​và nếu nó không kích hoạt ngoại lệ bạn muốn thử nghiệm thất bại.

$this->object->triggerException(); 
$this->fail('The above statement was expected to trigger and exception.'); 

Tất nhiên triggerException được thay thế bằng thứ gì đó trong đối tượng của bạn.

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