2009-03-04 3 views
7

내가 맞다면, SimpleTest는 PHP 오류가 발생했다고 단정 할 수있게 해줍니다. 그러나, 나는 문서를 기반으로 그것을 사용하는 방법을 알아낼 수 없습니다. 나는 내 생성자에 전달하는 개체가 내가 잘못 가고 MyOtherObjectSimpleTest : PHP 오류가 발생했다고 주장하는 방법?

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); 
} 

의 인스턴스 인 것을 주장하고 싶어?

답변

13

힌트 유형 힌트는 E_RECOVERABLE_ERROR이며 PHP 버전 5.2 이후 SimpleTest에서 걸러 낼 수 있습니다. 다음은 "must be instance"텍스트를 포함하는 모든 오류를 포착합니다. PatternExpectation의 생성자는 perl 정규식을 사용합니다.

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

본인은이를 확인하지 않았으므로 본인 만이이를 가정합니다. 귀하의 답변 주셔서 감사합니다! – Andrew

2

PHP에는 오류와 예외가 있습니다. 이는 약간 다릅니다. 형식이 잘못된 함수에 잘못된 형식을 전달하면 예외가 발생합니다. 당신은 당신의 테스트 케이스에서 그것을 잡아야한다. 예 : 단순히

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

나 :

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

그러나이 예외가 발생 줄 끝에서 시험을 중단 않습니다.

+1

나는 다운 투표를하지 않았습니다. 그러나 나는 누군가가 그것을 왜곡했을 것이라고 생각해야한다고 생각했다.이 대답은 '오류'가 아니라 '예외'와 관련이있다. 유형 힌트가 잘못된 유형을 선택하면 '예외'가 아니라 '오류'가 발생합니다. –

1

테스트가 끝나고 오류가 없다면 SimpleTest는 그것을 삼킨 다음 패스를 계산합니다. (PHP (치명적이지 않은) 오류와 예외에 대해 각각 동일한 방식으로 동작하는 expectError 및 expectException이 있습니다.)

2

SimpleTest는 실제로 이것을 지원하지 않습니다. SimpleTest에서 PHP 오류를 잡을 수 없습니다. 형식 힌트는 테스트 할 수 없다는 점을 제외하고는 훌륭합니다. 형식 힌트는 치명적인 PHP 오류를 발생시킵니다.

+2

PHP 버전 5.2부터 SimpleTest는 유형 힌팅 오류를 캡처 할 수 있습니다. 내 대답을 보라. –

관련 문제