How to unit-test Ausnahmen mit PHPUnit?
Ich bin nicht immer, wie unit-Tests Exceptions mit PHPUnit.
Bitte sehen Sie sich meine Methode mit der Ausnahme:
public function getPhone($html, $tag = 'OFF', $indicative, $number_lenght) {
//.. code
if ($tag <> 'OFF') {
$html = $doc[$tag]->text(); //Apanho apenas o texto dentro da TAG
if (empty($html)) {
throw new Exception("Nao foi possivel apanhar qualquer texto dentro da TAG, Metodo em causa: getPhone()");
}
}
//.. code
}
Und jetzt meine PHPUnit Test:
<?php
require_once '../Scrap.php';
class ScrapTest extends PHPUnit_Framework_TestCase
{
protected $scrap;
//Setup function to instantiate de object to $this->scrap
protected function setUp()
{
$this->scrap = new Scrap;
}
/**
* @covers Scrap::getPhone
* @expectedException Exception
*
*/
public function testGetPhone() {
//Variables1
$array_static1 = Array(0 => 218559372, 1 => 927555929, 2 => 213456789, 3 => 912345678);
$phone_list1 = '</div>A Front para<br /><br /><br /><br /><br /><br />-Apoio;<br />-Criação;<br />-Campanhas;<br />-Promoções<br /><br /><br />CONDIÇÕES:<br /><br />Local de Trabalho: Es<br />Folgas: Mistas<br /><br /><br /><br />ordem 500€<br /><br /><br /><br />Mínimos:<br /><br />- Conhecimentos;<br />- Ensino ;<br />-INGLÊS.<br /><br /><br /><br />Candidaturas: <br />[email protected]<br />218559372 | 927 555 929 | <br />RH<br />Rua C. Sal. 40<br />1000-000 Lisboa<br /><br /><br />+351 21 3456789 | (351) 912345678';
//Variables2
$array_static2 = Array(0 => 'NA');
$phone_list2 = "";
//.. more tests
//Test Exception, Tag not found
if (TRUE) {
//Bloco try/catch para confirmar que aqui lança excepção
try {
$this->scrap->getPhone($phone_list1, 'hr', '351', '9');
}
catch (Exception $expected) {
return;
}
$this->fail('An expected exception has not been raised.');
}
}
}
?>
Wenn ich den test habe ich "Fehler":
1) ScrapTest::testGetPhone
Expected exception Exception
FAILURES!
Tests: 1, Assertions: 5, Failures: 1.
Ausnahme wirft, aber ich will nicht zu bekommen, scheitern in der PHPUnit, Wenn die Ausnahme erhöhen, ich will den test OK.
Können Sie mir einige Hinweise?
Beste Grüße,
- mögliche Duplikate von Wie zu verwenden PHPUnit ist setExpectedException()?
- gefragt wurde nur ein paar Minuten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie zu viel zu tun gibt.
Entweder verwenden: @expectedException Ausnahme
ODER: try /catch /$this->fail
So, wie Sie sind, tun Sie es jetzt sagt "Fang die exception und DANN erwarten, dass der code zu werfen, noch einer!".
Die erste Methode ist übersichtlicher meiner Meinung nach, weil es nur 1 Linie gegen 5 (oder noch mehr) Zeilen code, und es ist weniger fehleranfällig.
Das sollte es tun.
$this->setExpectedException('ExceptionTypeGoesHere')
an der Spitze der test-Methode, wie auch die zwei oben aufgeführten. Ich denke, das ist der sauberste Ansatz.Gibt es zwei Möglichkeiten zum testen geworfen Ausnahmen, aber es hängt von Ihren Notwendigkeiten ab. Wenn Sie nicht über die Pflege der Inhalte/Eigenschaften der Ausnahme (d.h. dem code, Nachricht, etc), dann kannst du das tun:
Anderes, wenn Sie mit Ausnahme der Eigenschaften für die Behauptung (D. H. code), dann kann man die try-catch-fail:
Beachten Sie die
return
Anweisung innerhalb dercatch
block.Die
$this->fail();
- Anweisung wird/werden muss nur einmal aufgerufen, es wird keine Ausnahme ausgelöst. Also, dieser test case schlägt fehl, da sollte es test die Ausnahme, die geworfen in den ersten Platz.