LibCoverage, PHP 库的代码全覆盖测试辅助工具

2021-01-08 20:50:21 +08:00
 dvaknheo

https://github.com/dvaknheo/libcoverage

https://gitee.com/dvaknheo/libcoverage

解决的问题:写 php 库的时候让 PHP 代码全覆盖测试

使用方法:

composer require --dev dvaknheo/libcoverage ## 安装
composer exec libcoverage          # 查看帮助
composer exec libcoverage setup    # 安装
phpunit                            # phpunit 单元测试
cat test_reports/index.html        # 查看报告,你可以用浏览器打开
# composer exec libcoverage cloze  # 新增了类,添加测试模板运行这个
# phpunit tests/AppTest.php && phpunit tests/support.php # 某类的猜测类变更,重新生成
# composer exec libcoverage report  # 备用生成报告,phpunit 的时候已经就有了。

作用: 运行完 phpunit 就能开浏览器里打开看到华丽的全覆盖测试的报告了。

看自己写的库有哪些不爽的,挨个做到 100% 覆盖.

我的环境是 wsl, php 7.3,phpunit 9.2.0 // 不是 phpunit 9.3 版哦

LibCoverage 这个项目覆盖是自举 的。 你 clone 下来跑 phpunit 就是。

例如有个项目 src/App.php (带 composer.json 这就不说了。)

<?php
namespace MyProject;

class App
{
    public function foo()
    {
        var_dump(DATE(DATE_ATOM));
    }
}

composer exec libcoverage setup 生成的 AppTest.php

<?php 
namespace tests\MyProject;

use MyProject\App;

use LibCoverage\LibCoverage;

class AppTest extends \PHPUnit\Framework\TestCase
{
    public function testAll()
    {
        LibCoverage::Begin(App::class);
        
        /* //
        App::G()->foo();
        //*/
        
        LibCoverage::End();
    }
}

你会看到的报告是 0% .

把中间注释部分打开,再跑 phpunit 就是 100% 了。

1783 次点击
所在节点    PHP
1 条回复
dvaknheo
2021-01-09 09:25:20 +08:00
刚更新版本 。1.0.3 刚把子类化实现了
可以这么操作:

```
composer require phpunit/php-code-coverage:8.0.2
vendor/bin/libcoverage report --override_class='MyProject\MyLibCoverage'
```
MyProject\MyLibCoverage extends LibCoverage/LibCoverage 这就能替换内部实现了

例子中的 src/App.php 只是 psr-4 里的一个文件。
Libcoverage 对所有类的文件都会生成个相应的 Test.php 文件
这能保证不会遗漏掉应该做覆盖测试的文件

如果你觉得在同一工程里 测试文件使得 文件太多
可以新建一个测试工程 require 你的应用工程,如 composer require my/myproject 等
设置 path_src 指向应用工程的 src 文件。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/743162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX