문제

내가 정확하다면, SimpleTest를 사용하면 PHP 오류가 발생한다고 주장 할 수 있습니다. 그러나 문서를 기반으로 사용하는 방법을 알 수 없습니다. 제 생성자로 전달하는 객체가 인스턴스라고 주장하고 싶습니다. MyOtherObject

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

내가 어디로 잘못 가고 있습니까?

도움이 되었습니까?

해결책

유형 Hinting은 PHP 버전 5.2 이후 단순하게 잡을 수있는 e_recoverable_error를 던졌습니다. 다음은 텍스트 "의 인스턴스"가 포함 된 오류를 포착합니다. Patternectation의 생성자는 Perl Regex를 취합니다.

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

다른 팁

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

그러나 이것은 예외가 발생한 선 후 테스트가 중단됩니다.

단순한 것은 실제로 이것을 지원하지 않습니다. 단순하게 치명적인 PHP 오류를 포착 할 수 없습니다. 테스트 할 수없는 경우를 제외하고 유형 힌트는 훌륭합니다. 유형 Hinting은 치명적인 PHP 오류를 던집니다.

오류가 발생하기 전에 오류가 발생하기 전에 예상해야합니다. 그러면 SimpleTest가 그것을 삼키고 패스를 계산합니다. 테스트가 끝까지 도달하고 오류가 없으면 실패합니다. (PHP (치명적이지 않은) 오류 및 예외에 대해 동일한 방식으로 동일한 방식으로 행동하는 Expecterror 및 Expectureception이 있습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top