我通过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
);
});
涵盖了自己创建路由,但不包括内部的匿名回调。
正如您在此图片中看到的那样:
答案 0 :(得分: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。这将很难支持,因此考虑如何使这个类更可测试是有意义的。
希望这有帮助!
答案 1 :(得分:0)
老实说,这些路线定义中没有“活动部件”,因此它们并不需要UNIT测试覆盖。只需将@codeCoverageIgnore
放在类上,这将消除报告中的粉红色位。如果它们都被集中到应用程序类中,请先将它们拉出到路由定义类中。
对于这类事情,通过功能测试自动化测试。您可以使用WebTestCases(https://silex.symfony.com/doc/2.0/testing.html#webtestcase)来测试实际的请求行为。
更新: 可能是为了让这个更清楚......考虑一下你是否使用YAML配置你的路线而不是编码它们(无论如何这可能是一个好主意),你不会试图对YAML进行单元测试吗?不,那是愚蠢的。您可以通过WebTestCase在功能上测试请求本身。当在代码中完成yer route config时,同样适用。