带有模拟的 PHPUnit 测试覆盖率 API

PHPUnit test coverage API with mock

我,我想介绍一种从 API.

获取身份验证的方法

这是我的 class:

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:

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 的新手,所以如果您有任何建议。

感谢您的帮助!

你有 select 首选覆盖率引擎(如 xdebug 或 phpdbg)吗?

如果您使用的是 phpstorm,您可以右键单击测试目录,然后转到 Edit 'tests (PHPUnit)

然后select一个代码覆盖率引擎

然后点击Apply

现在运行你的代码覆盖测试

嗯,经过研究,我想我想测试的方法是不可能被覆盖的。这是一个 API 调用,覆盖范围需要由编写此代码的开发人员完成。 感谢您的帮助。