getTestInstance(); self::assertEquals($this->getExpectedType(), $instance->getType()); } /** * @dataProvider invalidTypeDataProvider * * @param mixed $value */ public function testInvalidType(mixed $value): void { $this->expectException(InvalidArgumentException::class); new TestPaymentData($value); } public static function invalidTypeDataProvider() { return [ [''], [null], [Random::str(40)], [0], ]; } abstract protected function getTestInstance(): AbstractPaymentData; abstract protected function getExpectedType(): string; } class TestPaymentData extends AbstractPaymentData { public function __construct($type) { parent::__construct([]); $this->setType($type); } }