Rangka Ujian Yii, yang dibina di PHPUnit, menyediakan persekitaran yang mantap untuk menulis kedua -dua unit dan ujian fungsi. Mari rosak cara menggunakannya untuk setiap:
Ujian Unit: Ujian unit memberi tumpuan kepada komponen individu atau unit kod, seperti model atau pengawal. Yii memudahkan ini dengan menyediakan lekapan dan pembantu seperti codeception. Ujian unit biasa mungkin mengesahkan peraturan pengesahan model atau output tindakan pengawal.
Untuk membuat ujian unit, anda biasanya membuat kelas yang memanjangkan Codeception\Test\Unit
(atau kelas tersuai yang memanjangkannya) dalam direktori tests/unit
anda. Di dalam kelas ini, anda akan menentukan kaedah yang dijelaskan dengan @test
yang mewakili kes ujian individu. YII menyediakan alat yang berguna untuk mengejek kebergantungan dan mengakses komponen aplikasi.
Sebagai contoh, katakan anda mempunyai model User
dengan peraturan pengesahan yang memerlukan nama pengguna yang unik. Ujian unit mungkin kelihatan seperti ini:
<code class="php"><?php namespace tests\unit\models; use app\models\User; use Codeception\Test\Unit; class UserTest extends Unit { /** * @test */ public function validateUniqueUsername() { $user1 = new User(['username' => 'testuser', 'email' => 'test@example.com', 'password' => 'password']); $this->assertTrue($user1->save()); $user2 = new User(['username' => 'testuser', 'email' => 'test2@example.com', 'password' => 'password']); $this->assertFalse($user2->save()); $this->assertArrayHasKey('username', $user2->getErrors()); } }</code>
Ujian ini mewujudkan pengguna, kemudian cuba membuat yang lain dengan nama pengguna yang sama, mengesahkan bahawa pengesahan gagal seperti yang diharapkan.
Ujian Fungsian: Ujian Fungsian Memeriksa interaksi antara bahagian -bahagian yang berlainan aplikasi anda, sering mensimulasikan tindakan pengguna. Mereka berguna untuk memastikan aliran data dan pengalaman pengguna yang betul. Ujian fungsional Yii biasanya memanfaatkan keupayaan ujian penerimaan codeception.
Ujian fungsional biasanya diletakkan dalam direktori tests/functional
dan memanjangkan Codeception\Test\Functional
. Anda akan berinteraksi dengan aplikasi anda melalui lapisan HTTP, sering menggunakan klien HTTP terbina dalam Codeception untuk membuat permintaan dan menegaskan terhadap respons.
Contoh ujian fungsional mungkin mengesahkan bahawa pengguna berjaya log masuk:
<code class="php"><?php namespace tests\functional\controllers; use tests\functional\FunctionalTester; class SiteCest { public function login(FunctionalTester $I) { $I->amOnPage('/site/login'); $I->fillField('LoginForm[username]', 'testuser'); $I->fillField('LoginForm[password]', 'password'); $I->click('Login'); $I->see('Logout (testuser)', 'h1'); // Assuming successful login displays this } }</code>
Organisasi ujian yang berkesan adalah penting untuk mengekalkan dan kebolehbacaan. Berikut adalah beberapa amalan terbaik:
tests/unit
dan tests/functional
).testValidEmailValidation
, testSuccessfulUserLogin
).Mengintegrasikan ujian anda ke dalam saluran paip CI/CD anda memastikan bahawa kod anda diuji dengan teliti sebelum penggunaan. Ini biasanya melibatkan menggunakan alat CI/CD (seperti Jenkins, Gitlab CI, atau tindakan GitHub) untuk menjalankan ujian anda secara automatik pada setiap komit atau permintaan tarik kod.
Proses ini melibatkan mengkonfigurasi alat CI/CD anda ke:
yii test
untuk menjalankan unit dan ujian fungsional anda.Walaupun rangka kerja YII menyediakan asas yang kukuh, anda boleh mengintegrasikan alat ujian dan perpustakaan lain untuk meningkatkan strategi ujian anda. Ini mungkin melibatkan:
Ingatlah bahawa integrasi memerlukan perancangan yang teliti untuk mengelakkan konflik dan mengekalkan konsistensi. Pilih alat tambahan berdasarkan keperluan khusus dan kerumitan projek anda. Sering kali, gabungan alat terbina dalam Yii dan perpustakaan luaran yang dipilih dengan teliti menawarkan pendekatan ujian yang paling komprehensif.
Atas ialah kandungan terperinci Bagaimana saya menggunakan rangka kerja ujian Yii untuk menulis ujian unit dan ujian fungsional?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!