2017-07-27 1 views
0

Vous cherchez de l'aide pour écrire un meilleur code/tests, mais semblait avoir trébuché sur un problème tout de suite - toute aide serait grandement appréciée.PHPUnit pas attraper l'exception

Script:

$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."); 
} 

Test:

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

Erreur:

Il y avait 1 échec:

1) Tests \ Feature \ Account \ fournisseur \ Feeds \ SupplierFeedFactoryTest :: testBuild Echec de l'affirmation que l'exception de type "Exception" est jeté.

+0

Les attentes doivent être exprimées avant le code testé. Sinon, ils sont inutiles. C'est comme si vous achetiez un parapluie après l'arrêt de la pluie. Dans votre cas, la ligne qui appelle '$ this-> expectExceptionMessage()' ne s'exécute pas car (quoi d'autre?) Le code testé ('SupplierFeedFactory :: build()') a levé une exception. – axiac

Répondre

1

La méthode PHPUnit est littérale, EXPECTexception, tout ce que vous avez à faire est de le mettre avant que l'exception n'arrive.

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

Vous pouvez également utiliser des annotations pour cela, voir aussi: https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html et d'autres exemples, comme Q & A ici sur le site: https: // stackoverflow.com/a/39837176/367456 – hakre