2017-09-05 4 views
1

私はphpunitユニットテストで100%のコードカバレッジに近づいていますが、私が現在扱っていないのはルーティングだけです。そして、私はそれをテストする方法として不明です。助けてもらえますか?ユニットテストでsilexの匿名コールバック

私は次のように私のルーティングを行うためにサイレックスフレームワークを使用しています:

$api->put('/update/{websiteName}/{endpointName}', function($websiteName, $endpointName, Request $request) use ($databaseServiceContainer, $sourceRetrievalService) { 
    $controller = new RequestController(
     $databaseServiceContainer, 
     $sourceRetrievalService 
    ); 

    return $controller->update(
     $websiteName, 
     $endpointName, 
     $request 
    ); 
}); 

自体が覆われているルーティングの作成が、内部ではない匿名のコールバック。あなたはこの画像の中に見ることができるように

は:正直に言うとhttps://github.com/ri0t1985/api-creator

+0

https://stackoverflow.com/questions/17580005/silex-phpunit-functional-testsは役に立ちますか? –

+0

いいえ、申し訳ありません。それは機能テストであり、単体テストではありません:) – Erik

+0

ルート定義内でサービスを作成するので、これをテストするのは少し難しいでしょうか? – localheinz

答えて

1

私はこれをユニットテストする必要はないと確信しています。機能/受入れテストでルータをカバーすることができます。

しかし、あなたは本当にあなたがこのアプローチを使用することができますユニットテストでルータの設定をカバーしたい場合:

// ... 

$path = '/foo'; 

$app = new Application(); 
$app->get($path, function() { 
    return 'foo'; 
}); 

$request = Request::create($path, 'GET'); 
$response = $app->handle($request); 

$this->assertEquals('foo', $response->getContent()); 
// ... 

your implementation on github探し、dependensiesはここDIからなっています。これはサポートするのが難しいので、このクラスをよりテスト可能にする方法を考えることが理にかなっています。

希望すると便利です。

0

As you can see within this image.

完全なコードが提供されて、そこにそれらのルート定義には「可動部分」ませんので、彼らドン本当にUNITのテストカバレッジが必要です。クラスに@codeCoverageIgnoreと入力するだけで、レポートのピンクのビットが取り除かれます。それらがすべてアプリケーションクラスにまとめられている場合は、最初にそれらをルート定義クラスに引き出します。

このような場合は、機能テストを介してテストを自動化してください。 WebTestCases(https://silex.symfony.com/doc/2.0/testing.html#webtestcase)を使用して、実際の要求動作をテストできます。

更新: おそらくこれをもっと明確にするには...もしあなたがYAMLをコード化するのではなく、それを使ってルートを構成したなら(おそらく良い考えですが)、YAMLのユニットテストをしようとしないでしょう君は?いいえ、それは冗談でしょう。 WebTestCaseを使用してリクエスト自体を機能的にテストします。 yer route configがコードで実行されている場合も同様です。

+1

私はコードカバレッジから無視することができますが、ベストプラクティスとはみなされません。コントローラのシグネチャが変更された場合、ルートの作成は失敗します。私はこれをユニットテストで検出したいと思います – Erik

+1

これは単体テスト*の仕事ではないので、仕事のための不適切なツールで何かをテストしないことは完全に "ベストプラクティス"です。ユニットテストでは、「コントローラのシグネチャが変更された場合」などの外部の考慮事項では忙しくはありません。テストする正確な機能に焦点を当てるべきです。その機能には可動部分がないため、ユニットテストは必要ありません。しかし、それは機能テストの推論によってテストすることができます。 WebTestCaseを使用してコントローラを機能的にテストすると、ルート定義の整合性も保証されます。 –

+0

通常は同意しますが、データベースのコンテンツを使用して新しいルートを動的に生成しています。それらのルートが正常に作成されたかどうかを確認することは、完全に単体テストの仕事です。現在のところ、経路が実際に存在するかどうかをテストする方法は見つかりませんでした。 – Erik

関連する問題