PHPUnitを使用して例外を単体テストする方法がわかりません。
例外のある私のメソッドを参照してください:
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
}
そして今、私のPHPUnitテスト:
<?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.');
}
}
}
?>
テストを実行すると、「失敗」が発生しました。
1) ScrapTest::testGetPhone
Expected exception Exception
FAILURES!
Tests: 1, Assertions: 5, Failures: 1.
例外が発生しますが、PHPUnitで失敗したくありません。例外が発生した場合は、テストをOKにします。
手がかりを教えていただけますか?
宜しくお願いします、
あなたはそこでやりすぎです。
どちらか使用:@expectedException例外
[〜#〜]または[〜#〜]:try/catch/$ this-> fail
あなたが今それをしている方法は、「その例外をキャッチし、コードが別の例外をスローすることを期待している」と言っています。
最初の方法は、5行(またはそれ以上)のコードに対して1行しかないため、エラーが発生しにくいため、私の意見ではよりクリーンです。
/**
* @covers Scrap::getPhone
* @expectedException Exception
*
*/
public function testGetPhone() {
// Variables1
$array_static1 = Array(0 => 218559372, 1 => 927555929, 2 => 213456789, 3 => 912345678);
$phone_list1 = '...';
// Variables2
$array_static2 = Array(0 => 'NA');
$phone_list2 = "";
// .. more tests
// Bloco try/catch para confirmar que aqui lança excepção
$this->scrap->getPhone($phone_list1, 'hr', '351', '9');
それはそれをする必要があります。
スローされた例外をテストする方法は2つありますが、ニーズによって異なります。例外の内容/プロパティ(コード、メッセージなど)を気にしない場合は、次のことができます。
_$this->setExpectedException('MyApp\Exception');
$object->someFailingCodeWithException();
_
それ以外の場合、アサーション(つまりコード)に例外プロパティを使用する必要がある場合は、try-catch-failを実行できます。
_try {
$object->someFailingCodeWithException();
} catch (MyApp\Exception $e) {
$this->assertEquals($e->getCode(), 100);
return;
}
$this->fail();
_
return
ブロック内のcatch
ステートメントに注意してください。 $this->fail();
ステートメントは、例外が発生しない場合にのみ呼び出す必要があります。したがって、このテストケースは、最初にスローされない例外をテストする必要があるため、失敗します。