📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials PHPUnit Testing Parameterized Tests

Parameterized Tests

5 min read
Use PHP 8 Attributes (#[Test], #[DataProvider], #[CoversClass]) instead of docblock annotations.

Parameterized Tests with Attributes

use PHPUnitFrameworkAttributesDataProvider;
use PHPUnitFrameworkAttributesTest;

class StringValidatorTest extends TestCase {
    #[Test]
    #[DataProvider("validEmailProvider")]
    public function validEmailsPass(string $email): void {
        $this->assertTrue((new Validator)->isEmail($email));
    }

    public static function validEmailProvider(): array {
        return [
            ["alice@example.com"],
            ["bob+tag@gmail.com"],
            ["user@sub.domain.org"],
        ];
    }

    #[Test]
    #[DataProvider("invalidEmailProvider")]
    public function invalidEmailsFail(string $email): void {
        $this->assertFalse((new Validator)->isEmail($email));
    }

    public static function invalidEmailProvider(): array {
        return [
            "empty"         => [""],
            "no at sign"    => ["notanemail"],
            "no domain"     => ["alice@"],
            "double at"     => ["alice@@example.com"],
        ];
    }
}