V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dvaknheo
V2EX  ›  PHP

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

  •  
  •   dvaknheo · 2021-01-08 20:50:21 +08:00 · 1546 次点击
    这是一个创建于 1175 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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% 了。

    1 条回复    2021-01-09 09:25:20 +08:00
    dvaknheo
        1
    dvaknheo  
    OP
       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 文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2793 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:51 · PVG 19:51 · LAX 04:51 · JFK 07:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.