Weiß jemand, ob es eine assert
oder etwas Ähnliches, das prüfen kann, ob im getesteten Code eine Ausnahme ausgelöst wurde?
Antworten
Zu viele Anzeigen?Hier finden Sie alle Ausnahmen, die Sie machen können. Beachten Sie, dass alle von ihnen sind optional .
class ExceptionTest extends PHPUnit_Framework_TestCase
{
public function testException()
{
// make your exception assertions
$this->expectException(InvalidArgumentException::class);
// if you use namespaces:
// $this->expectException('\Namespace\MyException');
$this->expectExceptionMessage('message');
$this->expectExceptionMessageRegExp('/essage$/');
$this->expectExceptionCode(123);
// code that throws an exception
throw new InvalidArgumentException('message', 123);
}
public function testAnotherException()
{
// repeat as needed
$this->expectException(Exception::class);
throw new Exception('Oh no!');
}
}
Die Dokumentation ist zu finden unter これ .
/**
* @expectedException Exception
* @expectedExceptionMessage Amount has to be bigger then 0!
*/
public function testDepositNegative()
{
$this->account->deposit(-7);
}
Seien Sie sehr vorsichtig mit "/**"
Beachten Sie das doppelte "*". Wenn Sie nur "**" (Sternchen) schreiben, wird Ihr Code nicht funktionieren. Stellen Sie außerdem sicher, dass Sie die letzte Version von phpUnit verwenden. In einigen früheren Versionen von phpunit wird @expectedException Exception nicht unterstützt. Ich hatte 4.0 und es hat bei mir nicht funktioniert, ich musste auf 5.5 updaten. https://coderwall.com/p/mklvdw/install-phpunit-with-composer mit Composer zu aktualisieren.
PhpUnit ist eine erstaunliche Bibliothek, aber dieser spezielle Punkt ist ein bisschen frustrierend. Aus diesem Grund können wir die Open-Source-Bibliothek turbotesting-php verwenden, die eine sehr bequeme Assertion-Methode hat, um uns beim Testen von Ausnahmen zu helfen. Sie ist hier zu finden:
Und um sie zu nutzen, müssen wir nur Folgendes tun:
AssertUtils::throwsException(function(){
// Some code that must throw an exception here
}, '/expected error message/');
Wenn der Code, den wir innerhalb der anonymen Funktion eingeben, keine Ausnahme auslöst, wird eine Ausnahme ausgelöst.
Wenn der Code, den wir innerhalb der anonymen Funktion eingeben, eine Ausnahme auslöst, aber seine Nachricht nicht mit dem erwarteten Regexp übereinstimmt, wird ebenfalls eine Ausnahme ausgelöst.
Für PHPUnit 5.7.27 und PHP 5.6 und um mehrere Ausnahmen in einem Test zu testen, war es wichtig, die Ausnahmeprüfung zu erzwingen. Die Verwendung der Ausnahmebehandlung allein, um die Instanz von Exception zu bestätigen, überspringt das Testen der Situation, wenn keine Ausnahme auftritt.
public function testSomeFunction() {
$e=null;
$targetClassObj= new TargetClass();
try {
$targetClassObj->doSomething();
} catch ( \Exception $e ) {
}
$this->assertInstanceOf(\Exception::class,$e);
$this->assertEquals('Some message',$e->getMessage());
$e=null;
try {
$targetClassObj->doSomethingElse();
} catch ( Exception $e ) {
}
$this->assertInstanceOf(\Exception::class,$e);
$this->assertEquals('Another message',$e->getMessage());
}
- See previous answers
- Weitere Antworten anzeigen