Data providers för parametriserade tester
Kör samma test med flera indatauppsättningar med dataProvider.
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?
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
- Konfigurera PHPUnit och skriv ditt första test
- Påståenden och testmetoder
- Data providers för parametriserade tester
- Mocka beroenden med PHPUnit