INTERN
composer require --dev proklung/phpunit-testing-tools
Klasse suchen:
Verwenden Sie ProklTestingToolsBaseBaseTestCase. Verwenden Sie ProklTestingToolsToolsContainerBuildContainer. Die Klasse ContainerAwareBaseTestCase erweitert BaseTestCase {/** * @inheritDoc * @throws Exception */protected function setUp(): void{$this->container = static::$testContainer = BuildContainer::getTestContainer( ['dev/test_container.yaml','dev/local.yaml'],'/Resources/config', [new SampleCompilerPass()], // Optionaler Parameter - ausgewählte Compiler-Passes,'dev', // Окружение. Zum Download - devtrue // Debug. Zur Verbesserung - true,['service_to_mock'] // Dienstleistungen, die meiner Meinung nach (sm. durch mehrere Dienstleistungen ersetzt));parent::setUp(); } }
Lesen Sie den letzten Test.
Es werden Konfigurationsdienste aus heruntergeladenen Dateien auf den angegebenen Zeitpunkt hinzugefügt (siehe DOCUMENT_ROOT-Tests).
Der Mechanismus (auf der Basis von Proxy-Servern auf Anfrage) wird aus der Band und der Anpassung an lokale Standorte ausgewählt.
Verwenden Sie ProklTestingToolsToolsServiceMocker. Verwenden Sie ProklTestingToolsBaseBaseTestCase. Die Klasse MyTest erweitert BaseTestCase {use RestoreServiceContainer;protected function setUp(): void{parent::setUp(); $this->container = BuildContainer::getTestContainer( ['test_container.yaml'],'/../../../../tests/Standalone/Resource/config', [],'dev',true, ['filesystem.local.adapter'] // Dienste, die nicht mehr funktionieren.); }öffentliche Funktion testFoo() {// Für alle Aufrufe ServiceMock::all($this->container->get('filesystem.local.adapter'), 'getAdapter', function () { return new Local( $_SERVER['DOCUMENT_ROOT'] . ' /prüfen/'); }); $result = $this->container->get('filesystem.local.adapter');// Nur für den nächsten Aufruf ServiceMock::next($this->container->get('filesystem.local.adapter') , 'getAdapter', function () { return new Local( $_SERVER['DOCUMENT_ROOT'] . '/test/'); }); // Dadurch wird ein neues aufrufbares ServiceMock::next($this->container->get('filesystem.local.adapter'), 'getAdapter', function () { throw new InvalidArgument('getAdapter kann einmal aufgerufen werden! in die Warteschlange gestellt! '); });$mock = // Erstelle einen PHPUnit-Mock oder einen anderen gewünschten Mock.ServiceMocker::swap($this->container->get('filesystem.local.adapter'), $mock);// .. . $service = $this->container->get('filesystem.local.adapter'); $result = $service->getAdapter(); // Methode des Dienstes (und des Dienstes целиком) unterstützt. }protected function tearDown(): void{// Um sicherzustellen, dass wir keine Auswirkungen auf andere Tests habenServiceMock::resetAll();// Sie können das RestoreServiceContainer-Merkmal einbinden, um Dienste automatisch zurückzusetzen} }
Verwenden Sie ProklTestingToolsTraitsBootTestKernelTrait; die Klasse „ExampleTest“ erweitert ProklTestingToolsBaseBaseTestCase {use BootTestKernelTrait;protected function setUp(): void{parent::setUp();$container = new ContainerBuilder(); // ... Inhaltstest.self::$kernel = $this->bootTestKernel($container); } }
Basisklasse für die Prüfung von Konsolenbefehlen.
Methoden:
executeCommand(Command $commandInstance, string $commandName, array $params = [])
– Dies ist der Fall, dieser Befehl wurde auf dem Bildschirm ausgewählt.
runCommand(Command $command, $input = [])
– Das Ergebnis wird durch die execute
angezeigt.
Es gibt keine weiteren Daten-Verkäufer
provideEmptyValue
– eine Frage.
provideEmptyScalarValue
– eine Suchfunktion
provideBooleanValue
– mehrere Zeilen
provideDateTimeInstance
– DateTime-Instance
provideNotExistingFilePath
– Legen Sie die erforderliche Datei ab
Обертка над.
Beispiel (im Test, gefolgt von BaseTestCase
):
// Wird bereitgestellt (dies ist nicht erforderlich, wenn die ausgewählten Projektparameter ausgewählt werden) Funktion in_the_loop $this->mockerFunctions->setNamespace('TestsAPI') ->full('in_the_loop', true) ->mock();
Namespace
– ein Name, der eine bestimmte Funktion hat.
Es handelt sich hierbei um eine bestimmte Methode (aus Gründen der Argumentation):
// Bevor get_cat_name mit dem Argument $this->idCategory ausgewählt wird, wird die verspottete Kategorie $this->mockerFunctions->setNamespace('TestAPIEntity') verwendet. ->partial('get_cat_name', 'Mocked Category', $this->idCategory) ->partial('category_description', 'Verspottete Kategoriebeschreibung', $this->idCategory) ->mock();
Bei der Verwendung dieses Bildes wird empfohlen (bei Problemen) beim Testen Anmerkungen hinzufügen:
/** * data() * * @runInSeparateProcess * @preserveGlobalState deaktiviert */
Konstrukteur von Symfony-Servern zum Testen.
Methode:
constructServiceLocator(array $config)
– $config
Gesamtansicht:
$object = new ClassName();$config = [ 'service_key' => ClassName::class, 'service_key2' => $object, ];
Wenn Sie die Klassenangabe in der Konfiguration vornehmen möchten, muss diese Klassenmethode installiert werden.
Gabelpaket
AppCommandCreateUserCommand verwenden; ProklTestingToolsBaseBaseTestCase verwenden; ProklTestingToolsToolsConsoleInteractsWithConsole verwenden; ProklTestingToolsTraitsBootTestKernelTrait verwenden; Klasse CreateUserCommandTest erweitert BaseTestCase {use InteractsWithConsole;use BootTestKernelTrait; geschützte Funktion setUp(): void{parent::setUp();$container = new ContainerBuilder();$container->setDefinition( IntegrityCheck::class,new Definition(IntegrityCheck::class, []) )->setTags(['console.command' => ['command' => 'module:neue']])->setPublic(true);self::$kernel = $this->bootTestKernel($container); $this->cliApplication = neu SymfonyBundleFrameworkBundleConsoleApplication(self::$kernel);$this->cliApplication->add($container->get(IntegrityCheck::class)); } öffentliche Funktion test_can_create_user(): void{$this->executeConsoleCommand('create:user kbond --admin --role=ROLE_EMPLOYEE --role=ROLE_MANAGER') ->assertSuccessful() // Befehls-Exit-Code ist 0->assertOutputContains('Administratorbenutzer „kbond“ wird erstellt‘) ->assertOutputContains('mit Rollen: ROLE_EMPLOYEE, ROLE_MANAGER') ->assertOutputNotContains('regulärer Benutzer') ;// erweiterte Verwendung$this->consoleCommand(CreateUserCommand::class) // kann die Befehlsklasse oder „name“ verwenden->splitOutputStreams() // standardmäßig werden stdout/stderr kombiniert, diese Option teilt sie auf->addArgument( 'kbond') ->addOption('--admin') // mit oder ohne „--“ Präfix->addOption('role', ['ROLE_EMPLOYEE', 'ROLE_MANAGER']) ->addOption('-R') // Verknüpfungsoptionen erfordern das Präfix „-“->addOption('-vv') // standardmäßig hat die Ausgabe normale Ausführlichkeit, verwenden Sie die Standardoptionen zum Ändern (-q, -v , -vv, -vvv)->addOption('--ansi') // Standardmäßig ist die Ausgabe nicht dekoriert, verwenden Sie diese Option zum Dekorieren->execute() // führen Sie den Befehl aus->assertSuccessful() ->assertStatusCode(0) // entspricht ->assertSuccessful()->assertOutputContains('Administratorbenutzer „kbond“ wird erstellt‘) ->assertErrorOutputContains('this is in stderr') // wird in Verbindung mit ->splitOutputStreams()->assertErrorOutputNotContains('admin user') // verwendet in Verbindung mit ->splitOutputStreams()->dump() // dump () der Statuscode/Ausgaben und continue->dd() // dd() der Statuscode/Ausgaben;// interaktives Testen commands$this->executeConsoleCommand('create:user', ['kbond']) ->assertSuccessful() ->assertOutputContains('Regulären Benutzer „kbond“ wird erstellt‘) ; // erweiterte Tests interaktiver Befehle$this->consoleCommand(CreateUserCommand::class) ->addInput('kbond') ->addOption('--no-interaction') // Befehle werden interaktiv ausgeführt, wenn eine Eingabe erfolgt. Verwenden Sie diese Option, um ->execute() zu deaktivieren. ->assertSuccessful() ->assertOutputContains('Regulären Benutzer „kbond“ wird erstellt‘) ; // auf das Ergebnis zugreifen$result = $this->executeConsoleCommand('create:user');$result->statusCode();$result->output(); $result->errorOutput(); } }
Mehr:
verwenden Sie AppCommandCreateUserCommand; verwenden Sie PHPUnitFrameworkTestCase; verwenden Sie ProklTestingToolsToolsConsoleTestCommand; die Klasse CreateUserCommandTest erweitert TestCase {öffentliche Funktion test_can_create_user(): void{ TestCommand::for(new CreateUserCommand(/** args... */)) ->splitOutputStreams() // standardmäßig werden stdout/stderr kombiniert, diese Option teilt sie auf->addArgument('kbond') ->addOption('--admin') // mit oder ohne „--“ Präfix->addOption('role', ['ROLE_EMPLOYEE', 'ROLE_MANAGER']) ->addOption('-R') // Verknüpfungsoptionen erfordern das Präfix „-“->addOption('-vv') // standardmäßig hat die Ausgabe normale Ausführlichkeit, verwenden Sie die Standardoptionen zum Ändern (-q, -v , -vv, -vvv)->addOption('--ansi') // Standardmäßig ist die Ausgabe nicht dekoriert, verwenden Sie diese Option zum dekorieren->execute() ->assertSuccessful() ->assertStatusCode(0) // entspricht ->assertSuccessful()->assertOutputContains('Administratorbenutzer „kbond“ wird erstellt‘) ->assertErrorOutputContains('this is in stderr') // wird in Verbindung mit ->splitOutputStreams()->assertErrorOutputNotContains('admin user') // verwendet in Verbindung mit ->splitOutputStreams()->dump() // dump () der Statuscode/Ausgaben und continue->dd() // dd() der Statuscode/Ausgaben; // interaktive Befehle testenTestCommand::for(new CreateUserCommand(/** args... */)) ->addInput('kbond') ->addOption('--no-interaction') // Befehle werden interaktiv ausgeführt, wenn eine Eingabe erfolgt. Verwenden Sie diese Option, um ->execute() zu deaktivieren. ->assertSuccessful() ->assertOutputContains('Regulären Benutzer „kbond“ wird erstellt‘) ;// access result$result = TestCommand::for(new CreateUserCommand(/** args... */))->execute();$result->statusCode();$result->output(); $result->errorOutput(); } }
Klasse MyClass {private string $privateProperty = 'private value';private function privateMethod(): string{return 'private return value'; } }$myClass = new Myclass();
So können Sie mit der invade
-Funktion den Wert des Privateigentums ermitteln.
invade($myClass)->privateProperty; // gibt 'privaten Wert' zurück
Mit der invade
-Funktion können Sie auch private Werte ändern.
invade($myClass)->privateProperty = 'geänderter Wert';invade($myClass)->privateProperty; // gibt 'geänderten Wert zurück
Mit invade
können Sie auch private Funktionen aufrufen.
invade($myClass)->privateMethod(); // gibt 'privaten Rückgabewert' zurück