0Pricing
PHP Academy · Lekcja

Dostawcy danych dla testów parametryzowanych

Uruchamiaj ten sam test dla wielu danych wejściowych za pomocą dataProvider

Dostawcy danych dla testów parametryzowanych to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.

Czym są dostawcy danych?

Dostawca danych to metoda zwracająca zestaw danych wejściowych testu. PHPUnit wywołuje metodę testową raz dla każdego zestawu danych, dzięki czemu można łatwo testować wiele kombinacji danych wejściowych bez powielania kodu.

Podstawowy dostawca danych

Dostawca zwraca tablicę dwuwymiarową. Każda tablica wewnętrzna odpowiada jednemu wywołaniu metody testowej.

<?php
public static function additionProvider(): array
{
    return [
        "two positives" => [2, 3, 5],
        "negative"      => [-1, 1, 0],
        "zeros"         => [0, 0, 0],
    ];
}

Powiązanie za pomocą atrybutu (PHPUnit 10+)

Użyj atrybutu #[DataProvider], aby powiązać test z jego dostawcą danych.

<?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));
}

Nazwane zestawy danych

Użyj kluczy asocjacyjnych w tablicy dostawcy, aby nadać każdemu zestawowi danych opisową nazwę — nazwy te pojawią się w wynikach testów.

<?php
public static function emailProvider(): array
{
    return [
        "valid email"      => ["user@example.com", true],
        "missing @"        => ["userexample.com",  false],
        "missing domain"   => ["user@",            false],
        "international"    => ["用户@例子.com",      true],
    ];
}

Zwracanie generatorów

Dostawcy mogą zwracać obiekt Generator zamiast tablicy, aby leniwie generować zestawy danych — jest to przydatne w przypadku bardzo dużych zbiorów danych.

<?php
public static function largeProvider(): Generator
{
    for ($i = 1; $i <= 1000; $i++) {
        yield "case $i" => [$i, $i * 2];
    }
}

Zewnętrzne źródła danych

Wczytuj dane testowe z pliku CSV, JSON-a lub bazy danych wewnątrz metody dostawcy, aby zasilać testy danymi z rzeczywistych przypadków.

<?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);
}

Wielu dostawców danych

Metoda testowa może korzystać z wielu dostawców, umieszczając atrybuty jeden po drugim.

Dostawca musi być statyczny

Metody dostawców danych muszą być zadeklarowane jako static, ponieważ PHPUnit wywołuje je przed utworzeniem instancji klasy testowej.

Testowanie przypadków brzegowych

Używaj dostawców danych do systematycznego testowania wartości zero, liczb ujemnych, pustych ciągów znaków, wartości null i maksymalnej liczby całkowitej — wszędzie tam, gdzie przypadki brzegowe mogą ujawnić błędy.

Wyniki dostawcy danych

W komunikatach o błędach pojawia się nazwa zestawu danych: CalculatorTest::test_add with data set "negative" ([-1, 1, 0]) — dzięki temu łatwo ustalić, który przypadek się nie powiódł.

Łączenie dostawców z setUp

Dostawców danych można łączyć z setUp. setUp jest uruchamiane przed każdą iteracją, zapewniając każdemu zestawowi danych nowy testowany obiekt.

Kwestie wydajności

Dostawcy są uruchamiani podczas wczytywania zestawu testów. Unikaj kosztownych operacji (wywołań HTTP i zapytań do bazy danych) w dostawcach — używaj zamiast nich fabryk i fixture’ów.

Podsumowanie

Dostawcy danych eliminują powielanie testów. Używaj kluczy asocjacyjnych, aby tworzyć opisowe komunikaty o błędach. Oznaczaj dostawców jako static i powiąż ich z atrybutem #[DataProvider].

Szybkie sprawdzenie

Jaki modyfikator widoczności musi mieć dostawca danych?

Często zadawane pytania

Czy lekcja „Dostawcy danych dla testów parametryzowanych” jest bezpłatna?

Tak — pełny tekst „Dostawcy danych dla testów parametryzowanych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Dostawcy danych dla testów parametryzowanych”?

Uruchamiaj ten sam test dla wielu danych wejściowych za pomocą dataProvider Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć PHP Academy?

Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Dostawcy danych dla testów parametryzowanych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?

Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfiguracja PHPUnit i pierwszy test
  2. Asercje i metody testowe
  3. Dostawcy danych dla testów parametryzowanych
  4. Mockowanie zależności za pomocą PHPUnit
← Powrót do PHP Academy