symplify/easy-testing

此包已被废弃且不再维护。没有建议的替代包。

测试变得简单

安装: 7,072,087

依赖者: 19

建议者: 0

安全: 0

星标: 42

关注者: 2

分支: 2

类型:symfony-bundle

11.1.26 2023-02-05 09:58 UTC

This package is auto-updated.

Last update: 2023-12-03 20:18:28 UTC


README

Downloads total

安装

composer require symplify/easy-testing --dev

用法

更容易使用Fixtures

你使用单元测试文件格式吗?

echo 'content before';

?>
-----
<?php

echo 'content after';

?>

或者如果没有变化

echo 'just this content';

代码由-----分隔。文件上半部分是输入,下半部分是期望输出。

通常将测试固定文件组织在测试目录中

/tests/SomeTest/Fixture/added_comma.php.inc
/tests/SomeTest/Fixture/skip_alreay_added_comma.php.inc

此包如何使其更容易使用?2个类

  • Symplify\EasyTesting\DataProvider\StaticFixtureFinder
  • Symplify\EasyTesting\StaticFixtureSplitter
// tests/SomeTest/SomeTest.php

namespace App\Tests\SomeTest;

use Iterator;
use PHPUnit\Framework\TestCase;
use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;
use Symplify\EasyTesting\StaticFixtureSplitter;
use Symplify\SmartFileSystem\SmartFileInfo;

final class SomeTest extends TestCase
{
    /**
     * @dataProvider provideData()
     */
    public function test(SmartFileInfo $fileInfo): void
    {
        $inputAndExpected = StaticFixtureSplitter::splitFileInfoToInputAndExpected($fileInfo);

        // test before content
        $someService = new SomeService();
        $changedContent = $someService->process($inputAndExpected->getInput());

        $this->assertSame($inputAndExpected->getExpected(), $changedContent);
    }

    public function provideData(): Iterator
    {
        return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture');
    }
}

特性

你需要将输入代码放在单独的文件中吗?例如,测试文件被移动?

而不是使用splitFileInfoToInputAndExpected(),请使用splitFileInfoToLocalInputAndExpectedFileInfos()

-$inputAndExpected = StaticFixtureSplitter::splitFileInfoToInputAndExpected(
+$inputFileInfoAndExpectedFileInfo = StaticFixtureSplitter::splitFileInfoToLocalInputAndExpectedFileInfos(
    $fileInfo
 );

与格式化方法相比,splitFileInfoToLocalInputAndExpectedFileInfos()

  • 将固定文件分离为输入和期望内容
  • 将它们都保存为单独的文件到临时路径
  • 可选地自动加载第一个,例如,如果您需要它进行反射
use Symplify\EasyTesting\StaticFixtureSplitter;

$inputFileInfoAndExpectedFileInfo = StaticFixtureSplitter::splitFileInfoToLocalInputAndExpectedFileInfos(
    $fileInfo,
    true
);

默认情况下,StaticFixtureFinder只查找*.php.inc文件。

use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;

return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture');

如果您使用不同的文件,例如*.twig*.md,请在第二个参数中更改它

use Symplify\EasyTesting\DataProvider\StaticFixtureFinder;

return StaticFixtureFinder::yieldDirectory(__DIR__ . '/Fixture', '*.md');

更新Fixtures

如何通过单个PHPUnit运行更新数百个测试Fixtures?

如果您有意更改软件的输出,您可能希望更新您的固定文件。手动?不,从命令行

UPDATE_TESTS=1 vendor/bin/phpunit
UT=1 vendor/bin/phpunit

为此,我们必须将StaticFixtureUpdater::updateFixtureContent()调用添加到我们的测试用例中

use PHPUnit\Framework\TestCase;
use Symplify\EasyTesting\DataProvider\StaticFixtureUpdater;
use Symplify\EasyTesting\StaticFixtureSplitter;
use Symplify\SmartFileSystem\SmartFileInfo;

final class SomeTestCase extends TestCase
{
    /**
     * @dataProvider provideData()
     */
    public function test(SmartFileInfo $fixtureFileInfo): void
    {
        $inputFileInfoAndExpectedFileInfo = StaticFixtureSplitter::splitFileInfoToLocalInputAndExpectedFileInfos(
            $fixtureFileInfo
        );

        // process content
        $currentContent = '...';

        // here we update test fixture if the content changed
        StaticFixtureUpdater::updateFixtureContent(
            $inputFileInfoAndExpectedFileInfo->getInputFileInfo(),
            $currentContent,
            $fixtureFileInfo
        );
    }

    // data provider...
}

通过文件和内容断言两个目录

您生成大量文件吗?您想跳过逐个文件进行挑剔测试吗?

使用assertDirectoryEquals()方法验证文件及其内容是否符合预期。

use PHPUnit\Framework\TestCase;
use Symplify\EasyTesting\PHPUnit\Behavior\DirectoryAssertableTrait;

final class DirectoryAssertableTraitTest extends TestCase
{
    use DirectoryAssertableTrait;

    public function testSuccess(): void
    {
        $this->assertDirectoryEquals(__DIR__ . '/Fixture/first_directory', __DIR__ . '/Fixture/second_directory');
    }
}

报告问题

如果您遇到错误或想要请求新功能,请访问Symplify monorepo问题跟踪器

贡献

此包的源代码包含在Symplify monorepo中。我们欢迎在symplify/symplify上对此包进行贡献。