Начните тестировать с Testo уже сегодня и помогите сделать его лучше к релизу!
Чистый код
Без наследования от TestCase или вообще без классов.
Функции проверок разбиты на семантические группы:
\Testo\Assert — утверждения, выполняются сразу\Testo\Expect — ожидания, откладываются до завершения тестаПайповый синтаксис с группировкой по типу делает код лаконичным и типобезопасным.
use Testo\Assert;
// Пайповые ассерты — группировка по типу
Assert::string($email)->contains('@');
Assert::int($age)->greaterThan(18);
Assert::file('config.php')->exists();
Assert::array($order->items)
->allOf(Item::class)
->hasCount(3);Пишите тесты так, как удобно вам.
// Явное объявление теста в методе с атрибутом #[Test]
final class OrderTest
{
#[Test]
public function createsOrderWithItems(): void
{
$order = new Order();
$order->addItem(new Product('Bread'));
Assert::int($order->itemCount())->equals(1);
}
}Нативный плагин для PhpStorm и IntelliJ IDEA.
Весь привычный функционал: запуск и перезапуск из gutter-иконок, навигация между тестами и кодом, отладка с брейкпоинтами, генерация тестов, дерево результатов.
Get Plugin 280Добавьте атрибут #[Bench]#[Bench(array $callables, array $arguments = [], int $warmup = 1, int $calls = 1_000, int $iterations = 10)]Объявляет бенчмарк для сравнения производительности метода с альтернативными реализациями. к методу, и Testo покажет, какая из реализаций работает быстрее. Со статистикой, фильтрацией выбросов и рекомендациями по стабильности.
// Эталонный метод с атрибутом #[Bench]
#[Bench(
callables: ['sumInCycle' => [self::class, 'sumInCycle']],
arguments: [1, 5_000],
)]
public static function sumInArray(int $a, int $b): int
{
return \array_sum(\range($a, $b));
}// Альтернативная реализация
public static function sumInCycle(int $a, int $b): int
{
$result = 0;
for ($i = $a; $i <= $b; ++$i) {
$result += $i;
}
return $result;
}