如何进行转弯/easy-coverage

一个简单的包,用于鼓励/强制开发者编写测试。

0.1.1 2023-07-17 07:43 UTC

This package is auto-updated.

Last update: 2024-09-18 10:48:00 UTC


README

一个简单的包,用于鼓励/强制开发者编写测试。

我为什么创建这个包?

我在多个项目中与多个初级开发者合作。

我总是想找到一个方法来鼓励/强制他们编写测试。

并且我希望这个过程能够集成到CI/CD和预推送工作流程中。

安装

composer require "howtomakeaturn/easy-coverage:^0.1"

用法

假设你认为 App\Services 命名空间非常重要,并且你想要强制所有开发者为该命名空间下的每个公共方法编写测试。

以下是一个基本示例

<?php

namespace Tests\Coverage;

use PHPUnit\Framework\TestCase;
use Howtomakeaturn\EasyCoverage\EasyCoverage;

class CoverageTest extends TestCase
{
    public function testCoverage()
    {
        $coverage = new EasyCoverage();

        $coverage->includeNamespaces([
            'App\Services',
        ]);

        $coverage->scan();

        if ($coverage->result()) {
            $this->assertTrue(true);
        } else {
            $num = count($coverage->missingMethods());

            $str = implode(', ', $coverage->missingMethods());

            $msg = "You need to write tests for these $num methods: $str";

            $this->fail($msg);
        }
    }
}

每次为相关方法创建新的测试时,使用 PHP 8 属性语法 对它们进行标记

<?php

namespace Tests\Unit;

use PHPUnit\Framework\TestCase;
use Howtomakeaturn\EasyCoverage\Target;

class SimpleTaskOneTest extends TestCase
{
    #[Target('App\Services\SimpleTaskOne@doSomething')]
    public function testBasicTest()
    {
        $task = new \App\Services\SimpleTaskOne();

        $task->doSomething();

        $this->assertTrue(true);
    }
}

就是这样!

任何在 App\Services 下的任何类中创建新公共方法的开发者都必须编写测试!

如果你想要忽略某些方法,可以使用

    $coverage->alwaysIgnoreMethods([
        '__construct',
    ]);

如果你想要忽略某些类,可以使用

    $coverage->ignoreClasses([
        'App\Services\LargeLegacyTask',
    ]);

如果你想要忽略类中的某些方法,可以使用

    $coverage->ignoreClassMethods([
        'App\Services\SimpleTaskTwo@doSomething',
    ]);

推荐工作流程

  1. 你指定多个你认为需要编写测试的命名空间。

  2. 在PHPUnit、CI/CD和预推送工作流程中运行EasyCoverage。

  3. 在这些命名空间下编写新公共方法的任何人都将被强制编写测试!

这是如何在幕后工作的?

  1. EasyCoverage会找到你指定的命名空间下的所有 publicnon-static 方法。

  2. EasyCoverage会找到你在 Tests 命名空间下用 Howtomakeaturn\EasyCoverage\Target 属性标记的所有类方法。

  3. EasyCoverage比较上述两个数组的值,然后返回结果。

许可证

EasyCoverage是开源软件,许可协议为MIT。