Еще пара идей для вас -
1 / Вы можете выполнить некоторые шаги настройки в новом слое класса, из которого вы расширяете - например, вот один из моих более обобщенных c test-parent классы, которые я использовал для создания общих настроек, а также проверки качества кода для самого кода тестов:
<?php
namespace Tests;
use PHPUnit\Framework\TestCase as PHPUnit_TestCase;
use PHPUnitGoodPractices\Traits as PHPUnitGoodPractices;
/**
* @SuppressWarnings(PHPMD.NumberOfChildren)
*/
abstract class TestCase extends PHPUnit_TestCase
{
use TestCaseTrait; // setup Mockery
use \Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
use PHPUnitGoodPractices\ExpectationViaCodeOverAnnotationTrait;
use PHPUnitGoodPractices\ExpectOverSetExceptionTrait;
use PHPUnitGoodPractices\IdentityOverEqualityTrait;
#use PHPUnitGoodPractices\ProphecyOverMockObjectTrait;
}
Многие из моих собственных тестов будут расширяться Tests\TestCase
.
. Используемые в этом классе, вы также можете использовать черты для перемещения общей функциональности из отдельных тестовых классов. Аннотации Soem DocBlock, такие как @ before , также будут запускать код так же, как метод, подобный protected function setUp(): void {}
.
2 / Еще более полезным может быть @ dataProvider - они возвращают массив данных (или yield
из метода Generator
). Если ваши тесты запускают один и тот же тестовый код для более чем нескольких версий различных данных, то использование метода DataProvider позволяет назвать один тест десятками, даже сотнями раз с параметрами данных для метода теста.
<?php
use PHPUnit\Framework\TestCase;
class DataTest extends TestCase
{
/**
* @dataProvider additionProvider
*/
public function testAdd($a, $b, $expected)
{
$this->assertSame($expected, $a + $b);
}
public function additionProvider()
{
return [
[0, 0, 0],
[0, 1, 1],
[1, 0, 1],
[1, 1, 3], // this test would fail
];
}
}