Поставщики данных для параметризованных тестов
Запускайте один и тот же тест с разными входными данными с помощью dataProvider
«Поставщики данных для параметризованных тестов» — бесплатный урок PHP Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.
Что такое поставщики данных?
Поставщик данных — это метод, возвращающий набор входных данных для тестов. PHPUnit вызывает тестовый метод один раз для каждого набора данных, поэтому легко проверять множество сочетаний входных данных без дублирования кода.
Базовый поставщик данных
Поставщик возвращает двумерный массив. Каждый вложенный массив соответствует одному вызову тестового метода.
<?php
public static function additionProvider(): array
{
return [
"two positives" => [2, 3, 5],
"negative" => [-1, 1, 0],
"zeros" => [0, 0, 0],
];
}Связывание с атрибутом (PHPUnit 10+)
Используйте атрибут #[DataProvider], чтобы связать тест с его поставщиком данных.
<?php
use PHPUnit\Framework\Attributes\DataProvider;
#[DataProvider("additionProvider")]
public function test_add(int $a, int $b, int $expected): void
{
$this->assertSame($expected, (new Calculator())->add($a, $b));
}Именованные наборы данных
Используйте ассоциативные ключи в массиве поставщика, чтобы присвоить каждому набору данных описательное имя — они отображаются в выводе тестов.
<?php
public static function emailProvider(): array
{
return [
"valid email" => ["user@example.com", true],
"missing @" => ["userexample.com", false],
"missing domain" => ["user@", false],
"international" => ["用户@例子.com", true],
];
}Возврат генераторов
Поставщики могут возвращать Generator вместо массива, чтобы лениво создавать наборы данных — это удобно для очень больших наборов.
<?php
public static function largeProvider(): Generator
{
for ($i = 1; $i <= 1000; $i++) {
yield "case $i" => [$i, $i * 2];
}
}Внешние источники данных
Загружайте данные для тестов из CSV, JSON или базы данных внутри метода поставщика, чтобы выполнять тесты на данных из реальных сценариев.
<?php
public static function csvProvider(): array
{
$rows = array_map("str_getcsv", file("tests/fixtures/data.csv"));
return array_map(fn($r) => [$r[0], (int)$r[1], (int)$r[2]], $rows);
}Несколько поставщиков данных
Тестовый метод может ссылаться на несколько поставщиков, если последовательно указать несколько атрибутов.
Поставщик должен быть статическим
Методы поставщиков данных должны быть объявлены как static, поскольку PHPUnit вызывает их до создания экземпляра тестового класса.
Тестирование граничных случаев
Используйте поставщиков, чтобы систематически охватить ноль, отрицательные числа, пустые строки, null и максимальное целое число — везде, где граничные случаи могут выявить ошибки.
Вывод поставщика данных
В сообщении об ошибке отображается имя набора данных: CalculatorTest::test_add with data set "negative" ([-1, 1, 0]) — поэтому легко определить, какой случай завершился ошибкой.
Сочетание поставщиков с setUp
Поставщики данных можно сочетать с setUp. setUp выполняется перед каждой итерацией, предоставляя каждому набору данных новый тестируемый объект.
Особенности производительности
Поставщики выполняются во время загрузки набора тестов. Избегайте ресурсоёмких операций (HTTP-вызовов, запросов к БД) в поставщиках — отдавайте предпочтение фабрикам и тестовым фикстурам.
Итоги
Поставщики данных устраняют дублирование тестов. Используйте ассоциативные ключи для информативных сообщений об ошибках. Объявляйте поставщики как static и связывайте их с помощью атрибута #[DataProvider].
Быстрая проверка
Какой модификатор доступа должен иметь поставщик данных?
Часто задаваемые вопросы
Урок «Поставщики данных для параметризованных тестов» бесплатный?
Да — полный текст урока «Поставщики данных для параметризованных тестов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.
Чему я научусь в уроке «Поставщики данных для параметризованных тестов»?
Запускайте один и тот же тест с разными входными данными с помощью dataProvider Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать PHP Academy?
Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Поставщики данных для параметризованных тестов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке PHP Academy?
Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Настройка PHPUnit и первый тест
- Проверки и методы тестов
- Поставщики данных для параметризованных тестов
- Имитация зависимостей с помощью PHPUnit