带有模拟的 PHPUnit 测试覆盖率 API
Posted
技术标签:
【中文标题】带有模拟的 PHPUnit 测试覆盖率 API【英文标题】:PHPUnit test coverage API with mock 【发布时间】:2021-01-07 07:45:03 【问题描述】:我想介绍一种从 API 获取身份验证的方法。
这是我的课:
class MyService
private $api_token;
private $uri_api;
public function __construct(string $api_token, string $uri_api)
$this->api_token = $api_token;
$this->uri_api = $uri_api;
public function api_authentication()
$client = HttpClient::create();
return $client->request('GET', $this->getUri_api().'salespoints/', [
'auth_bearer' => $this->getApi_token()
]);
这是我的测试课:
class MyServiceTest extends WebTestCase
public function test_api_authentication()
$client = new HttpClient();
$stub = $this->getMockBuilder(myService::class)
->disableOriginalConstructor()
->disableOriginalClone()
->disableArgumentCloning()
->disallowMockingUnknownTypes()
->getMock();
$stub->method('api_authentication')->willReturn($client);
$this->assertSame($client, $stub->api_authentication());
我正在使用 phpUnit here 的文档(示例 8.4)。
问题是当我运行 phpunit 时我的测试通过了,但 sonarQube 告诉我这不是测试覆盖率。我是使用 phpunit 的新手,所以如果您有任何建议。
感谢您的帮助!
【问题讨论】:
你到底在测试什么?整个测试似乎有点毫无意义。也许你可以澄清你的意图。 是的,菲利普,我认为我想要的不可能做到。我想测试一个 api 调用,但最后它没有被包含在测试覆盖范围内。 【参考方案1】:经过研究,我认为我想测试的方法无法涵盖。这是一个 API 调用,覆盖范围需要由编写此代码的开发人员完成。 感谢您的帮助。
【讨论】:
是的,没错,你只能覆盖你的代码。我认为,如果您使用任何代码覆盖工具,它可能会表明您的代码有多少被覆盖(这是 PhpStorm 代码覆盖的情况)。您可以按文件过滤并检查 API 调用是否被完全覆盖。那么你的工作就完成了!【参考方案2】:您是否选择了首选覆盖引擎(如 xdebug 或 phpdbg)?
如果您使用的是 phpstorm,您可以右键单击测试目录,然后转到 Edit 'tests (PHPUnit)
。
然后选择一个代码覆盖引擎
然后点击Apply
。
现在使用代码覆盖率运行您的测试
【讨论】:
谢谢文森特!这对测试很有帮助 我知道这很诱人,但一般来说 cmets 部分不应该用来说“谢谢”。为此,最好通过单击帖子侧面的按钮来表明帖子是正面的。我向您表明这一点,因为您是新用户。无论如何,我很高兴知道我可以帮助你一点。以上是关于带有模拟的 PHPUnit 测试覆盖率 API的主要内容,如果未能解决你的问题,请参考以下文章
在单独的进程中运行测试时,PHPUnit 无法生成代码覆盖率
在 phpunit 测试中覆盖 symfony TokenAuthenticator