nathanburkett / mesa-phpunit
PHPUnit 数据集组织和编排
0.2.0
2020-02-08 16:57 UTC
Requires
- php: ^7.1
- nathanburkett/mesa: 0.1.0
- phpunit/phpunit: ^8.5
Requires (Dev)
- phpmd/phpmd: ^2.8
- squizlabs/php_codesniffer: ^3.5
- vimeo/psalm: ^3.8
This package is auto-updated.
Last update: 2024-09-09 02:50:09 UTC
README
PHPUnit Mesa 是一种基于表格的PHPUnit数据提供者编排方法
安装
通过composer
composer require nathanburkett/mesa-phpunit --dev
使用
通过GeneratesTestCases
特性
使用 GeneratesTestCases
特性是开始消费PHPUnit表格的最简单方法。
<?php namespace Foo\Bar\Baz; use PHPUnit\Framework\TestCase; use NathanBurkett\Mesa\Fixture\PHPUnit\GeneratesTestCases; class FooTest extends TestCase { use GeneratesTestCases; }
给定一个测试用例的PHP文件
<?php // Location __DIR__ . '/DataSets/FooTest/OutputTestCases.php use PHPUnit\Framework\TestCase; use PHPUnit\MockObject\MockObject; return [ 'Expects \'foo\' output' => [ 'setupDependencyOneExpectations' => function (TestCase $test, MockObject $dependencyOne): MockObject { $dependencyOne->expects($test->once())->method('foo')->willReturn(true); return $dependencyOne; }, 'config' => 'Some config', 'expected' => 'FooBarBaz', ], ];
然后构建一个针对数据提供者的表格,如下所示
<?php namespace Foo\Bar\Baz; use PHPUnit\Framework\TestCase; use NathanBurkett\Mesa\Fixture\PHPUnit\GeneratesTestCases; class FooTest extends TestCase { use GeneratesTestCases; /** * @dataProvider generateOutputTestCases * * @param DependencyOne $dependencyOne * @param string $config * @param string $expected */ public function testOutput(DependencyOne $dependencyOne, string $config, string $expected) { $service = new FooService($dependencyOne, $config); $actual = $service->run(); $this->assertEquals($expected, $actual); } /** * @return \Generator */ public function generateOutputTestCases(): \Generator { yield from $this->generateTestCases( 'OutputTestCases.php' // this defaults to looking for test cases in __DIR__ . /DataSets/{ClassName}/{string} // [$this, 'setupOutputTestCase'] Optional setup func ); } /** * @param array $testCase * @return array */ public function setupOutputTestCase(array $testCase): array { $dependencyOne = $this->getMockBuilder(DependencyOne::class) ->disableOriginalConstructor() ->getMock(); return [ $testCase['setupDependencyOneExpectations']($this, $dependencyOne), $testCase['config'], $testCase['expected'], ]; } }
要更改默认目录(按类别逐个解决数据集时),扩展PHPUnitDataSetPathResolver并为 DEFAULT_DIRECTORY
常量提供不同的值
<?php namespace Foo\Bar\Baz; use NathanBurkett\Mesa\Fixture\PHPUnit\PathResolver\PHPUnitDataSetPathResolver; class NewPHPUnitPathResolver extends PHPUnitDataSetPathResolver { /** * @var string */ public const DEFAULT_DIRECTORY = 'TestCases'; }
并在您的测试类内部
<?php namespace Foo\Bar\Baz; use PHPUnit\Framework\TestCase; use Foo\Bar\Baz\NewPHPUnitPathResolver; use NathanBurkett\Mesa\Fixture\PHPUnit\GeneratesTestCases; use NathanBurkett\Mesa\Fixture\PHPUnit\PathResolver\PathResolver; class FooTest extends TestCase { use GeneratesTestCases; /** * @return PathResolver */ protected function getTestCasePathResolver(): PathResolver { return new NewPHPUnitPathResolver((string) $this->testCaseContext, new \ReflectionClass($this)); } }