2009-03-04 36 views
7

Nếu tôi chính xác, SimpleTest sẽ cho phép bạn khẳng định lỗi PHP được ném. Tuy nhiên, tôi không thể tìm ra cách sử dụng nó, dựa trên tài liệu. Tôi muốn khẳng định rằng đối tượng tôi chuyển vào hàm tạo của mình là một cá thể của MyOtherObjectSimpleTest: Làm thế nào để khẳng định rằng một lỗi PHP được ném?

class Object { 
    public function __construct(MyOtherObject $object) { 
     //do something with $object 
    } 
} 

//...and in my test I have... 
public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    $object = new Object($notAnObject); 
    $this->expectError($object); 
} 

Tôi sẽ làm gì sai?

Trả lời

13

Loại gợi ý ném E_RECOVERABLE_ERROR có thể bị bắt bởi SimpleTest từ phiên bản PHP 5.2. Sau đây sẽ bắt gặp bất kỳ lỗi nào chứa văn bản "phải là một thể hiện của". Các nhà xây dựng của PatternExpectation mất một regex perl.

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    $this->expectError(new PatternExpectation("/must be an instance of/i")); 
    $object = new Object($notAnObject); 
} 
+0

Tôi chưa xác minh điều này, vì vậy tôi chỉ giả định điều này là đúng. Cảm ơn câu trả lời của bạn! – Andrew

2

PHP có cả lỗi và ngoại lệ, hoạt động hơi khác một chút. Việc chuyển một kiểu sai tới một hàm được loại bỏ sẽ làm tăng một ngoại lệ. Bạn phải nắm bắt điều đó trong trường hợp thử nghiệm của bạn. Eg .:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    try { 
    $object = new Object($notAnObject); 
    $this->fail("Expected exception"); 
    } catch (Exception $ex) { 
    $this->pass(); 
    } 
} 

hoặc đơn giản là:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $this->expectException(); 
    $notAnObject = 'foobar'; 
    $object = new Object($notAnObject); 
} 

Nhưng lưu ý rằng điều này sẽ ngăn chặn sự kiểm tra sau khi dòng nơi ngoại lệ xảy ra.

+1

Tôi không bỏ phiếu cho bạn. Nhưng, nghĩ rằng tôi nên đề cập đến lý do tại sao tôi nghĩ rằng ai đó sẽ downvoted nó: Câu trả lời này liên quan đến 'ngoại lệ', không phải 'lỗi'. Khi một loại gợi ý chọn loại sai, nó ném một 'Lỗi' và không phải là 'Ngoại lệ'. –

1

bạn phải mong đợi lỗi trước khi nó xảy ra, sau đó SimpleTest sẽ nuốt nó và đếm một vượt qua, nếu thử nghiệm được kết thúc và không có lỗi thì nó sẽ thất bại. (có hy vọngError và expectException hành động theo cách tương tự, đối với lỗi PHP (không gây tử vong) và Ngoại lệ, tương ứng.)

2

Tắt, SimpleTest không thực sự hỗ trợ điều này. Bạn không thể gặp lỗi PHP Fatal trong SimpleTest. Loại gợi ý là rất tốt, ngoại trừ bạn không thể kiểm tra nó. Gõ gợi ý ném các lỗi PHP gây tử vong.

+2

Kể từ phiên bản PHP 5.2 SimpleTest có thể nắm bắt các lỗi gợi ý Loại. Xem câu trả lời của tôi. –

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