INTERN
composer require --dev proklung/phpunit-testing-tools
Klaimnya:
gunakan ProklTestingToolsBaseBaseTestCase; gunakan ProklTestingToolsToolsContainerBuildContainer; kelas ContainerAwareBaseTestCase memperluas BaseTestCase {/** * @inheritDoc * @throws Pengecualian */fungsi yang dilindungi setUp(): void{$this->container = static::$testContainer = BuildContainer::getTestContainer( ['dev/test_container.yaml','dev/local.yaml'],'/Resources/config', [New SampleCompilerPass()], // Опциональный параметр - kompiler yang lewat,'dev', // Окружение. По умолчанию - devtrue // Debug. По умолчанию - true,['service_to_mock'] // Сервисы, подлежащие мокингу (см. подраздел Моки сервисов));parent::setUp(); } }
Terima kasih atas tes yang tidak perlu.
Anda perlu menggunakan kunci yang diperlukan untuk melakukan ini (dapatkan DOCUMENT_ROOT тестов).
Mekanika (tidak ada yang perlu dilakukan karena masalah ini) di dalam dan di luar jangkauan под локальные нужды.
gunakan ProklTestingToolsToolsServiceMocker; gunakan ProklTestingToolsBaseBaseTestCase; kelas MyTest memperluas BaseTestCase {use RestoreServiceContainer; fungsi yang dilindungi setUp(): void{parent::setUp(); $ini->kontainer = BuildContainer::getTestContainer( ['test_container.yaml'],'/../../../../tests/Standalone/Resource/config', [],'dev',benar, ['filesystem.local.adapter'] // Сервис, который будет заменен моком.); }fungsi publik testFoo() {// Untuk semua panggilan ServiceMock::all($this->container->get('filesystem.local.adapter'), 'getAdapter', function () { return new Local( $_SERVER['DOCUMENT_ROOT'] . ' /tes/'); }); $result = $this->container->get('filesystem.local.adapter');// Hanya untuk panggilan berikutnya ServiceMock::next($this->container->get('filesystem.local.adapter') , 'getAdapter', function () { return new Local( $_SERVER['DOCUMENT_ROOT'] . '/test/'); }); // Ini akan memasukkan ServiceMock::next($this->container->get('filesystem.local.adapter'), 'getAdapter', function () { throw new InvalidArgument('getAdapter dapat memanggil sekali waktu) ke dalam antrian! '); });$mock = // buat tiruan PHPUnit atau tiruan lainnya yang Anda inginkan.ServiceMocker::swap($this->container->get('filesystem.local.adapter'), $mock);// .. . $layanan = $ini->wadah->dapatkan('sistem file.lokal.adapter'); $hasil = $layanan->getAdapter(); // Метод сервиса (или сервис целиком) подменен. }fungsi yang dilindungi teaDown(): void{// Untuk memastikan kami tidak memengaruhi tesServiceMock::resetAll();// Anda dapat menyertakan ciri RestoreServiceContainer untuk menyetel ulang layanan secara otomatis} }
gunakan ProklTestingToolsTraitsBootTestKernelTrait; kelas ContohTest memperluas ProklTestingToolsBaseBaseTestCase {use BootTestKernelTrait;fungsi terproteksi setUp(): void{parent::setUp();$container = new ContainerBuilder(); // ... Nama panggilan.self::$kernel = $this->bootTestKernel($container); } }
Tombol ini dapat digunakan untuk memutar nomor telepon.
Metode:
executeCommand(Command $commandInstance, string $commandName, array $params = [])
- ini adalah hal yang perlu Anda lakukan.
runCommand(Command $command, $input = [])
- Anda perlu execute
perintah tersebut.
Catatan Penting Lainnya
provideEmptyValue
- lanjutkan.
provideEmptyScalarValue
- ganti rugi
provideBooleanValue
- perluas
provideDateTimeInstance
- lalu pilih DateTime
provideNotExistingFilePath
- solusi yang tidak perlu
Buka lagi.
Contoh (dalam hal ini, Anda dapat menggunakan BaseTestCase
):
// Замокается полностью (т.е. не важно с какими параметрами пройдет вызов) функция in_the_loop $ini->mockerFunctions->setNamespace('TestsAPI') ->penuh('dalam_the_loop', benar) ->mengolok-olok();
Namespace
- nama yang sama, dalam arti yang mungkin.
Atau jumlah yang mungkin (dalam pengaturan lain):
// Untuk membuat get_cat_name dengan $this->idCategory dalam kategori Mocked $this->mockerFunctions->setNamespace('TestAPIEntity') ->partial('get_cat_name', 'Kategori yang diejek', $ini->idCategory) ->partial('category_description', 'Deskripsi kategori yang diejek', $this->idCategory) ->mengolok-olok();
Berikut ini adalah beberapa langkah yang perlu dilakukan (untuk melakukan hal ini) pada laporan berikut:
/** * data() * * @runInSeparateProcess * @preserveGlobalState dinonaktifkan */
Symfony dapat terhubung ke Symfony тестов.
Metode:
constructServiceLocator(array $config)
- lalu $config
diisi dengan:
$objek = NamaKelas baru();$config = [ 'kunci_layanan' => NamaKelas::kelas, 'kunci_layanan2' => $objek, ];
Selain itu, Anda juga harus menggunakan kartu kredit untuk mengatur kartu kredit Anda.
Terima kasih paketnya
gunakan AppCommandCreateUserCommand; gunakan ProklTestingToolsBaseBaseTestCase; gunakan ProklTestingToolsToolsConsoleInteractsWithConsole; gunakan ProklTestingToolsTraitsBootTestKernelTrait;kelas CreateUserCommandTest extends BaseTestCase {gunakan InteractsWithConsole; gunakan BootTestKernelTrait; fungsi yang dilindungi setUp(): void{parent::setUp();$container = new ContainerBuilder();$container->setDefinition( IntegrityCheck::class,Definisi baru(IntegrityCheck::class, []) )->setTags(['console.command' => ['command' => 'modul:еуые']])->setPublic(true);self::$kernel = $this->bootTestKernel($container); $ini->cliApplication = baru SymfonyBundleFrameworkBundleConsoleApplication(self::$kernel);$this->cliApplication->add($container->get(IntegrityCheck::class)); } fungsi publik test_can_create_user(): void{$this->executeConsoleCommand('create:user kbond --admin --role=ROLE_EMPLOYEE --role=ROLE_MANAGER') ->assertSuccessful() // kode keluar perintah adalah 0->assertOutputContains('Membuat pengguna admin "kbond"') ->assertOutputContains('dengan peran: ROLE_EMPLOYEE, ROLE_MANAGER') ->assertOutputNotContains('pengguna biasa') ;// penggunaan lanjutan$this->consoleCommand(CreateUserCommand::class) // dapat menggunakan kelas perintah atau "nama"->splitOutputStreams() // secara default stdout/stderr digabungkan, opsi ini membaginya->addArgument( 'ikatan') ->addOption('--admin') // dengan atau tanpa awalan "--"->addOption('role', ['ROLE_EMPLOYEE', 'ROLE_MANAGER']) ->addOption('-R') // opsi pintasan memerlukan awalan "-"->addOption('-vv') // secara default, output memiliki verbositas normal, gunakan opsi standar untuk mengubah (-q, -v , -vv, -vvv)->addOption('--ansi') // secara default, output tidak didekorasi, gunakan opsi ini untuk menghias->execute() // jalankan perintah->assertSuccessful() ->assertStatusCode(0) // setara dengan ->assertSuccessful()->assertOutputContains('Membuat pengguna admin "kbond"') ->assertErrorOutputContains('ini ada di stderr') // digunakan bersama dengan ->splitOutputStreams()->assertErrorOutputNotContains('admin pengguna') // digunakan bersama dengan ->splitOutputStreams()->dump() // dump () kode status/output dan continue->dd() // dd() kode status/output; // pengujian interaktif perintah$ini->executeConsoleCommand('buat:pengguna', ['kbond']) -> menegaskan Berhasil() ->assertOutputContains('Membuat "kbond" pengguna biasa) ; // pengujian lanjutan perintah interaktif$this->consoleCommand(CreateUserCommand::class) ->tambahkanInput('kbond') ->addOption('--no-interaction') // perintah dijalankan secara interaktif jika input diberikan, gunakan opsi ini untuk menonaktifkan->execute() -> menegaskan Berhasil() ->assertOutputContains('Membuat "kbond" pengguna biasa) ; // akses hasil$hasil = $ini->executeConsoleCommand('buat:pengguna');$hasil->statusCode();$hasil->output(); $hasil->errorOutput(); } }
dia:
gunakan AppCommandCreateUserCommand; gunakan PHPUnitFrameworkTestCase; gunakan ProklTestingToolsToolsConsoleTestCommand; kelas CreateUserCommandTest memperluas TestCase {fungsi publik test_can_create_user(): batal{ TestCommand::for(new CreateUserCommand(/** args... */)) ->splitOutputStreams() // secara default stdout/stderr digabungkan, opsi ini membaginya->addArgument('kbond') ->addOption('--admin') // dengan atau tanpa awalan "--"->addOption('role', ['ROLE_EMPLOYEE', 'ROLE_MANAGER']) ->addOption('-R') // opsi pintasan memerlukan awalan "-"->addOption('-vv') // secara default, output memiliki verbositas normal, gunakan opsi standar untuk mengubah (-q, -v , -vv, -vvv)->addOption('--ansi') // secara default, output tidak didekorasi, gunakan opsi ini untuk menghias->execute() -> menegaskan Berhasil() ->assertStatusCode(0) // setara dengan ->assertSuccessful()->assertOutputContains('Membuat pengguna admin "kbond"') ->assertErrorOutputContains('ini ada di stderr') // digunakan bersama dengan ->splitOutputStreams()->assertErrorOutputNotContains('admin pengguna') // digunakan bersama dengan ->splitOutputStreams()->dump() // dump () kode status/keluaran dan lanjutkan->dd() // dd() kode status/keluaran; // menguji perintah interaktifTestCommand::for(new CreateUserCommand(/** args... */)) ->tambahkanInput('kbond') ->addOption('--no-interaction') // perintah dijalankan secara interaktif jika input diberikan, gunakan opsi ini untuk menonaktifkan->execute() -> menegaskan Berhasil() ->assertOutputContains('Membuat "kbond" pengguna biasa) ;// akses hasil$hasil = TestCommand::for(new CreateUserCommand(/** args... */))->execute();$result->statusCode();$result->output(); $hasil->errorOutput(); } }
kelas Kelasku {string pribadi $privateProperty = 'nilai pribadi';fungsi pribadi privateMethod(): string{return 'nilai pengembalian pribadi'; } }$KelasSaya = KelasSaya baru();
Ini adalah bagaimana Anda bisa mendapatkan nilai properti pribadi menggunakan fungsi invade
.
menyerbu($KelasSaya)->Properti Pribadi; // mengembalikan 'nilai pribadi'
Fungsi invade
juga memungkinkan Anda mengubah nilai pribadi.
menyerbu($Kelassaya)->privateProperty = 'nilai berubah';menyerang($kelassaya)->privateProperty; // mengembalikan 'nilai yang diubah
Menggunakan invade
Anda juga dapat memanggil fungsi pribadi.
menyerang($KelasSaya)->privateMethod(); // mengembalikan 'nilai pengembalian pribadi'