арматура
Вступление
Написание фикстур теста является одной из самых трудоемких частей при написании тестов. Приспособления теста включают в себя написание кода для установки мира в известное состояние, а после теста верните его в исходное состояние.
При тестировании операций с массивами в PHPUnit массив, хранящийся в переменной `$ stack`, является просто фиксатором. В какой-то момент, однако, это устройство может быть более сложным, чем простой массив, и объем кода, необходимый для его установки, будет соответственно расти.
При настройке приборов фактическое содержание теста теряется в шуме настройки прибора. Эта проблема, похоже, усиливается при написании тестов с аналогичными приборами. Если среда тестирования не используется, нам придется дублировать код, который устанавливает фиксаторы для каждого теста, который мы пишем, таким образом, среда тестирования, такая как PHPUnit, используется для минимизации дублирования кодов, что повышает удобство сопровождения.
В PHPUnit разделение кода установки является ключевым. Код установки состоит из двух важных шаблонных функций `setUp ()` и `tearDown ()`.
Перед запуском тестового метода вызывается метод setUp (). Метод `setUp ()` - это то, где вы создаете объекты, которые должны быть протестированы. Как только метод теста завершится, независимо от того, успешно он или нет, вызывается другой шаблонный метод `tearDown ()`. `tearDown ()` - это место, где вы очищаете объекты, с которыми вы тестировали.
Всякий раз, когда для выражения зависимости используется аннотация «@ зависящий», между тестами следует использовать отношение «производитель-потребитель» для совместного использования прибора. Это не всегда желательно.
В приведенном ниже примере показано, как мы можем написать тесты `StackTest` таким образом, чтобы можно было использовать не сам прибор, а код, который его создает.
Для начала мы объявляем переменную экземпляра `$ stack`, которую мы собираемся использовать вместо локальной переменной метода. Затем мы помещаем создание фикстуры `array` в метод` setUp () `. Наконец, мы удаляем избыточный код из тестовых методов и используем вновь введенную переменную экземпляра `$ this-> stack` вместо локальной переменной метода` $ stack` с методом утверждения assertSame () `.
<?php
use PHPUnit\Framework\TestCase;
class StackTest extends TestCase
{
protected $stack;
protected function setUp(): void
{
$this->stack = [];
}
public function testEmpty()
{
$this->assertTrue(empty($this->stack));
}
public function testPush()
{
array_push($this->stack, 'foo');
$this->assertSame('foo', $this->stack[count($this->stack)-1]);
$this->assertFalse(empty($this->stack));
}
public function testPop()
{
array_push($this->stack, 'foo');
$this->assertSame('foo', array_pop($this->stack));
$this->assertTrue(empty($this->stack));
}
}
Методы шаблона `setUp ()` и `tearDown ()` выполняются только один раз для каждого метода тестирования или экземпляра в каждом классе тестирования.
Кроме того, методы шаблона `setUpBeforeClass ()` и `tearDownAfterClass ()` вызываются до запуска первого теста класса тестового примера и после запуска последнего теста класса тестового примера, соответственно.
В приведенном ниже примере показаны все методы шаблона, которые доступны и могут использоваться в классе тестового примера.
<?php
use PHPUnit\Framework\TestCase;
class TemplateMethodsTest extends TestCase
{
public static function setUpBeforeClass(): void
{
fwrite(STDOUT, __METHOD__ . "\n");
}
protected function setUp(): void
{
fwrite(STDOUT, __METHOD__ . "\n");
}
protected function assertPreConditions(): void
{
fwrite(STDOUT, __METHOD__ . "\n");
}
public function testOne()
{
fwrite(STDOUT, __METHOD__ . "\n");
$this->assertTrue(true);
}
public function testTwo()
{
fwrite(STDOUT, __METHOD__ . "\n");
$this->assertTrue(false);
}
protected function assertPostConditions(): void
{
fwrite(STDOUT, __METHOD__ . "\n");
}
protected function tearDown(): void
{
fwrite(STDOUT, __METHOD__ . "\n");
}
public static function tearDownAfterClass(): void
{
fwrite(STDOUT, __METHOD__ . "\n");
}
protected function onNotSuccessfulTest(Throwable $t): void
{
fwrite(STDOUT, __METHOD__ . "\n");
throw $t;
}
}
$ phpunit TemplateMethodsTest
PHPUnit |version|.0 by Sebastian Bergmann and contributors.
TemplateMethodsTest::setUpBeforeClass
TemplateMethodsTest::setUp
TemplateMethodsTest::assertPreConditions
TemplateMethodsTest::testOne
TemplateMethodsTest::assertPostConditions
TemplateMethodsTest::tearDown
.TemplateMethodsTest::setUp
TemplateMethodsTest::assertPreConditions
TemplateMethodsTest::testTwo
TemplateMethodsTest::tearDown
TemplateMethodsTest::onNotSuccessfulTest
FTemplateMethodsTest::tearDownAfterClass
Time: 0 seconds, Memory: 5.25Mb
There was 1 failure:
1) TemplateMethodsTest::testTwo
Failed asserting that <boolean:false> is true.
/home/sb/TemplateMethodsTest.php:30
FAILURES!
Tests: 2, Assertions: 2, Failures: 1.
Предыдущий: Тестер командной строки (2)
Далее: Подробнее о светильниках
Новый контент: Composer: менеджер зависимостей для PHP , R программирования