【发布时间】:2020-08-19 03:23:04
【问题描述】:
我有一个 API,我通过功能测试对其进行了测试,并且一切正常。问题出现在以下情况:
我有一个控制器,它通过服务执行外部 API 调用。我想在测试期间模拟该服务,但我不知道该怎么做。
所以这可能是我的代码(例如):
// src/service/MyService.php
class MyService
{
public function __construct(HttpClientInterface $client) {
$this->client = $client
}
public function call()
{
$this->client->get('https://api.com');
}
}
// src/controller/MyController.php
class MyController
{
/**
* @Route("/call")
*/
public function call(MyService $myService)
{
$myService->call();
}
}
// tests/controller/MyControllerTest.php
class MyControllerTest extends WebTestCase
{
public function testCall()
{
$client = static::createClient();
$client->request('GET', '/call');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
}
}
如何在测试期间模拟 MyService 服务?
【问题讨论】:
-
严格来说,您并没有真正模拟服务来进行功能测试。模拟用于单元测试。但是,您可以创建 services_test.yaml 文件并严格定义服务以进行测试。这一切都在文档中。
标签: php symfony testing phpunit functional-testing