Frage

Wenn ich richtig bin, Simple ermöglicht es Ihnen, ein PHP-Fehler zu behaupten, geworfen wird. Allerdings kann ich nicht herausfinden, wie es zu benutzen, auf der Grundlage der Dokumentation. Ich möchte behaupten, dass das Objekt, das ich in meinem Konstruktor eine Instanz von MyOtherObject ist

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

Wo soll ich denn falsch?

War es hilfreich?

Lösung

Typ Hinting wirft E_RECOVERABLE_ERROR die von Simple seit PHP-Version 5.2 aufgefangen werden kann. Das Folgende wird einen Fehler fangen mit dem Text „muss eine Instanz sein“. Der Konstruktor von PatternExpectation nimmt ein Perl regex.

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

Andere Tipps

PHP hat beide Fehler und Ausnahmen, die etwas anders arbeiten. eine falsche Art zu einer typehinted Funktion übergeben wird eine Ausnahme ausgelöst. Sie müssen, dass in Ihrem Testfall fangen. Zum Beispiel:.

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

oder einfach:

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

Beachten Sie aber, dass dies den Test nach der Linie zu stoppen, wo die Ausnahme auftritt.

Es stellte sich heraus, Simple nicht wirklich dies unterstützen. Sie können nicht Fatal PHP-Fehler in Simple fangen. Type Hinting ist groß, außer Sie es nicht testen können. Type Hinting wirft fatal PHP-Fehler.

Sie den Fehler zu erwarten haben, bevor es geschieht, dann wird es Simple schlucken und einen Pass zählen, wenn der Test am Ende bekommt, und es ist kein Fehler, dann wird es scheitern. (Es gibt expectError und expectException, die auf die gleiche Art und Weise handeln, für PHP (nicht tödlichen) Fehler und Ausnahmen, respectively.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top