3 Stimmen

Warum löst mein Skript keine Benachrichtigung aus, wenn es auf einen Wert in einem undefinierten Array zugreift?

Ich habe eine Testmethode, die wie folgt aussieht:

$row = $this->GetRowFromUserTable($id);
$this->assertLessThan(time(), time($row['last_update']));

Wenn $row null ist, sollte der Zugriff auf $row['last_update'] eine E_NOTICE auslösen und dieser Test sollte fehlschlagen, aber das tut er nicht.

Dieser Code schlägt beim ersten Assert fehl, also weiß ich, dass $row null ist (fixture ist dasselbe):

$row = $this->GetRowFromUserTable($id);
$this->assertNotNull($row);
$this->assertLessThan(time(), time($row['last_update']));

Wenn ich dies schreibe:

$row = $this->GetRowFromUserTable($id);
$this->assertEquals(E_ALL, error_reporting());
$this->assertLessThan(time(), time($row['last_update']));

es gelingt, so bin ich auch sicher, dass error_reporting richtig ist und diese Situation muss etwas mit PHPUnit zu tun haben.

Ich verwende PHPUnit 3.5.6

Ich habe diese Frage gelesen: Kann ich PHPUnit dazu bringen, fehlzuschlagen, wenn der Code eine Meldung auslöst? aber die Antwort schlägt vor, eine neuere Version von PHPUnit zu verwenden, aber diese Antwort ist von 2009, also ist es nicht das Richtige.

EDITAR: Ich verwende NetBeans IDE 6.9.1, um meinen Test durchzuführen.

2voto

edorian Punkte 37719

Wie gesagt, "convertNoticesToExceptions" war auch meine einzige Vermutung (+1).

Könnten Sie einen $foo = $undefinedVariable; irgendwo im Testfall, um zu sehen, ob das nicht auch eine Meldung auslöst // den Test nicht fehlschlagen lässt?

Um zu überprüfen, ob Ihre phpunit / php-Installation funktioniert (und vielleicht das Problem einzugrenzen), können Sie es versuchen:

<?php

class myTest extends PHPUnit_Framework_TestCase {
    public function testFoo() {
        $x = $foo;
        $this->assertTrue(true);
    }
}

und führen Sie es aus (beachten Sie den --no-configuration-Teil, um sicherzustellen, dass Sie nicht aus Versehen eine phpunit.dist.xml oder phpunit.xml mitnehmen)

phpunit --no-configuration foo.php 

Es zeigt die Ausgabe an:

PHPUnit 3.5.6 von Sebastian Bergmann.

E

Zeit: 0 Sekunden, Speicher: 2.50Mb

Es trat 1 Fehler auf:

1) myTest::testFoo Undefinierte Variable: foo

/home/user/foo.php:5

Vielleicht hilft das ein wenig

2voto

cmbuckley Punkte 36915

Der von Ihnen geschilderte Fall gibt keinen Aufschluss über die E_NOTICE . Der Zugriff auf undefinierte Schlüssel eines definierten Arrays ergibt eine E_NOTICE aber seltsamerweise funktioniert der Zugriff auf Nullwerte als Array nicht.

1voto

Kel Punkte 7510

Haben Sie convertNoticesToExceptions Konfigurationseigenschaft auf "true" gesetzt?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X