PHP Academy · Lektion

Data providers för parametriserade tester

Kör samma test med flera indatauppsättningar med dataProvider.

Lektion 3 av 414 steg

Data providers för parametriserade tester är en gratis lektion i PHP Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för PHP Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i PHP Academy innehåller totalt 4 lektioner.

Vad är data providers?

En data provider är en metod som returnerar en uppsättning testindata. PHPUnit anropar testmetoden en gång per datauppsättning, vilket gör det enkelt att testa många kombinationer av indata utan att upprepa kod.

Grundläggande data provider

Data providern returnerar en tvådimensionell array. Varje underarray motsvarar ett anrop till testmetoden.

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

Koppla med attribut (PHPUnit 10+)

Använd attributet #[DataProvider] för att koppla ett test till dess data provider.

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

Namngivna datauppsättningar

Använd associativa nycklar i provider-arrayen för att ge varje datauppsättning ett beskrivande namn — namnen visas i testresultatet.

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

Returnera generatorer

Providers kan returnera en Generator i stället för en array för att generera datauppsättningar lata — användbart för mycket stora datauppsättningar.

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

Externa datakällor

Läs in testdata från CSV, JSON eller en databas i provider-metoden för att driva tester med verklighetsdata.

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

Flera data providers

En testmetod kan referera till flera providers genom att stapla attribut.

Provider måste vara statisk

Data provider-metoder måste deklareras som static eftersom PHPUnit anropar dem innan testklassen instansieras.

Testa gränsfall

Använd providers för att systematiskt täcka noll, negativa tal, tomma strängar, null och maximala heltalsvärden — överallt där gränsfall sannolikt kan orsaka fel.

Data provider-resultat

Fel visar datauppsättningens namn: CalculatorTest::test_add with data set "negative" ([-1, 1, 0]) — vilket gör det enkelt att hitta det fall som misslyckades.

Kombinera providers med setUp

Data providers och setUp kan kombineras. setUp körs före varje iteration, vilket ger varje datauppsättning ett nytt objekt att testa.

Prestandaöverväganden

Providers körs när testsviten läses in. Undvik kostsamma operationer (HTTP-anrop, databasfrågor) i providers — föredra fabriker och fixtures.

Sammanfattning

Data providers eliminerar duplicering av tester. Använd associativa nycklar för beskrivande felmeddelanden. Markera providers som static och koppla dem med attributet #[DataProvider].

Snabb kontroll

Vilken synlighetsmodifierare måste en data provider ha?

Gratis att börja

Lär dig PHP med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
49
Lektioner
195

Vanliga frågor

Är lektionen ”Data providers för parametriserade tester” gratis?

Ja – hela texten till ”Data providers för parametriserade tester” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i PHP Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i PHP Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Data providers för parametriserade tester”?

Kör samma test med flera indatauppsättningar med dataProvider. Ni övar på PHP Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig PHP Academy?

Du behöver inga förkunskaper. Utbildningen i PHP Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Data providers för parametriserade tester”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här PHP Academy-lektionen?

Ja. Varje PHP Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Konfigurera PHPUnit och skriv ditt första test
  2. Påståenden och testmetoder
  3. Data providers för parametriserade tester
  4. Mocka beroenden med PHPUnit
← Tillbaka till PHP Academy