silex 中的单元测试匿名回调路由
Unit testing anonymous callback routing in silex
我正在通过 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
);
});
包括创建路由本身,但不包括其中的匿名回调。
正如您在这张图片中看到的那样:
老实说,那些路由定义中没有 "moving parts",所以它们并不真正需要 UNIT 测试覆盖。只需将 @codeCoverageIgnore
放在 class 上,这将消除报告中的粉红色位。如果它们都只是集中到应用程序 class 中,请先将它们拉出到路由定义中 class。
对于这种事情,通过功能测试自动化测试。您可以使用 WebTestCases (https://silex.symfony.com/doc/2.0/testing.html#webtestcase) 来测试实际的请求行为。
更新:
可能是为了更清楚地说明这一点……考虑一下,如果您使用 YAML 配置路由而不是对它们进行编码(无论如何这可能是个好主意),您不会尝试对 YAML 进行单元测试,对吗?不,因为那太愚蠢了。您将通过 WebTestCase 对请求本身进行功能测试。当您在代码中完成路由配置时,这同样适用。
我很确定这不需要进行单元测试。您可以通过 functional/acceptance 测试覆盖路由器。
但是如果你真的想通过单元测试覆盖路由器配置,你可以使用这种方法:
// ...
$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,依赖项是从 DI 获取的。这将很难支持,因此考虑如何使 class 更易于测试是有意义的。
希望对您有所帮助!
我正在通过 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
);
});
包括创建路由本身,但不包括其中的匿名回调。
正如您在这张图片中看到的那样:
老实说,那些路由定义中没有 "moving parts",所以它们并不真正需要 UNIT 测试覆盖。只需将 @codeCoverageIgnore
放在 class 上,这将消除报告中的粉红色位。如果它们都只是集中到应用程序 class 中,请先将它们拉出到路由定义中 class。
对于这种事情,通过功能测试自动化测试。您可以使用 WebTestCases (https://silex.symfony.com/doc/2.0/testing.html#webtestcase) 来测试实际的请求行为。
更新: 可能是为了更清楚地说明这一点……考虑一下,如果您使用 YAML 配置路由而不是对它们进行编码(无论如何这可能是个好主意),您不会尝试对 YAML 进行单元测试,对吗?不,因为那太愚蠢了。您将通过 WebTestCase 对请求本身进行功能测试。当您在代码中完成路由配置时,这同样适用。
我很确定这不需要进行单元测试。您可以通过 functional/acceptance 测试覆盖路由器。
但是如果你真的想通过单元测试覆盖路由器配置,你可以使用这种方法:
// ...
$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,依赖项是从 DI 获取的。这将很难支持,因此考虑如何使 class 更易于测试是有意义的。
希望对您有所帮助!