2017-07-27 4 views
0

より良いコードやテストを書くためにいくつかの助けを探していますが、すぐに問題を遭遇したようです。PHPUnitが例外をキャッチしていません

スクリプト:

$feed = 'App\Http\Services\Supplier\Feeds\\' . ucwords($feedName) . "Feed"; 

if (class_exists($feed)) { 
    return new $feed($headerRowToSkip); 
} else { 
    throw new Exception("Invalid feed type given."); 
} 

テスト:

public function testBuild() 
{ 
    SupplierFeedFactory::build('MusicMagpie', 1); 
    $this->expectExceptionMessage("Invalid feed type given."); 
} 

エラー:1つの故障があった

:フィーチャー\アカウント\サプライヤー\フィード\

1)テスト\ SupplierFeedFactoryTest :: testBuild "Exception"タイプの例外が存在しないと主張できませんでした。スローされる。

+0

テストされたコードの前に期待値を表記しなければなりません。さもなければ、彼らは役に立たない。雨が止んだ後、傘を買っているようです。あなたの場合、テストされたコード( 'SupplierFeedFactory :: build()')が例外をスローしたため、 '$ this-> expectExceptionMessage()'を呼び出す行は実行されません。 – axiac

答えて

1

PHPUnitメソッドはEXPECTexceptionというリテラルなので、実際に例外が発生する前にそれを置くだけです。

public function testBuild() 
{ 
    $this->expectException('Exception'); 
    $this->expectExceptionMessage("Invalid feed type given."); 
    SupplierFeedFactory::build('MusicMagpie', 1); 
} 
+0

また、注釈を使用することもできます。https://phpunit.de/manual/current/en/writing-tests-for-phpunit.htmlやその他の例(サイトのQ&Aなど):https:// stackoverflow.com/a/39837176/367456 – hakre

関連する問題