zhivocode/testing

模块化测试的微框架。

1.0.3 2024-03-14 15:40 UTC

This package is auto-updated.

Last update: 2024-09-08 06:54:17 UTC


README

Latest Version on Packagist Tests Total Downloads

此微框架用于PHP语言的模块化测试,旨在追求优雅和简洁,而不是加载用户过多的功能。它提供了所有必要的工具来执行有效且可靠的测试。它有助于提高软件开发的品质,缩短测试时间,并简化调试过程。它将成为那些重视测试场景中简洁和优雅的开发者不可或缺的工具。

安装

您可以使用composer安装此包

composer require zhivocode/testing

使用

框架初始化

use Zhivocode\Testing\Engine;

include_once __DIR__ . '/vendor/autoload.php';

$options = array_merge(['filter' => $argv[1] ?? null], getopt('', ['filter:']));

$exitCode = (new Engine())
    ->load(__DIR__ . '/test')
    ->run($options);

exit($exitCode);

测试示例

use Zhivocode\Testing\IData;
use Zhivocode\Testing\ITest;

class MyTest 
{
    public function before(IData $data): void
    {
        // Выполняется перед запуском тестов данного класса
        $data->set('foo', 'bar');
    }

    public function after(IData $data): void
    {
        // Выполняется после завершения тестов данного класса
        $data->unset('foo');
    }

    public function beforeEach(IData $data): void
    {
        // Выполняется перед запуском каждого теста данного класса
        $data->set('baz', 'bat');
    }

    public function afterEach(IData $data): void
    {
        // Выполняется после завершения каждого теста данного класса
        $data->unset('baz');
    }

    public function testGetData(ITest $test, IData $data): void
    {
        $data->get('foo'); // Получение раннее заданных данных
    }

    public function testNested(ITest $test, IData $data): void
    {
        $test->test(
            'Вложенный тест 1',
            function (ITest $test, IData $data) {
                // Можно выстраивать многоуровневое тестирование
            }
        );

        $test->test(
            'Вложенный тест 2',
            function (ITest $test, IData $data) {
                $test->test(
                    'Вложенный тест 3',
                    function (ITest $test, IData $data) {
                        // Уровень вложенности тестов не ограничен
                    }
                );
            }
        );
    }

    public function testSuccess(ITest $test, IData $data): void
    {
        // Если метод не меняет состояние $test, такой тест считается успешно завершенным
    }

    public function testFail(ITest $test, IData $data): void
    {
        $test->fail('Сообщение о возникшей ошибке в тестировании');
    }

    public function testSkip(ITest $test, IData $data): void
    {
        $test->skip('Сообщение о причине прерывания теста и прерывания дальнейшего тестирования в текущем методе');
    }

    public function testFatal(ITest $test, IData $data): void
    {
        $test->fatal('Сообщение о ошибке в тестировании и полного прерывания дальнейшего тестирования');
    }
}

运行测试

php ./test.php

运行特定类测试的测试

php ./test.php --filter MyTest

运行特定类测试方法的测试

php ./test.php --filter MyTest::testSuccess

运行特定类测试方法嵌套测试的测试

php ./test.php --filter "MyTest::testNested::Вложенный тест 2"

测试报告示例

report.png

变更日志

请查看变更日志以获取最近更改的更多信息。

参与项目

请查看参与以获取详细信息。

参与者

许可证

麻省理工学院(MIT)许可证。请查看许可证文件以获取更多信息。