Yii - Test
Bir PHP sınıfı yazdığımızda, nasıl çalıştığını doğrulamak için adım adım hatalarını ayıklıyoruz veya die veya echo ifadelerini kullanıyoruz. Bir web uygulaması geliştirirsek, sayfanın beklediğimiz gibi çalışmasını sağlamak için formlara test verilerini giriyoruz. Bu test süreci otomatikleştirilebilir.
Otomatik test yaklaşımı, uzun vadeli projeler için mantıklıdır;
- Karmaşık ve büyük
- Sürekli büyür
- Başarısızlığın maliyeti açısından çok pahalı
Projeniz karmaşıklaşmıyorsa ve nispeten basitse veya sadece tek seferlik bir projeyse, o zaman otomatik test aşırı olabilir.
Testlere Hazırlık
Step 1- Codeception çerçevesini kurun. Aşağıdaki kodu çalıştırın.
composer global require "codeception/codeception = 2.0.*"
composer global require "codeception/specify = *"
composer global require "codeception/verify = *"
Step 2 - Aşağıdakileri çalıştırın.
composer global status
Çıktı, "Geçerli dizin <dizin> olarak değiştirildi" dir. PATH değişkeninize '<dizin> / vendor / bin' 'eklemelisiniz. Bu durumda, aşağıdaki kodu çalıştırın -
export PATH = $PATH:~/.composer/vendor/bin
Step 3 - adlı yeni bir veritabanı oluşturun 'yii2_basic_tests'.
Step 4 - Testler dizininin içinde çalıştırın.
codeception/bin/yii migrate
Veritabanı yapılandırması şu adreste bulunabilir: tests/codeception/config/config.php.
Step 5 - Test süitlerini aracılığıyla oluşturun.
codecept build
Fikstür
Fikstürlerin temel amacı, ortamın bilinmeyen bir durumda kurulması ve böylece testlerinizin beklenen şekilde çalışmasıdır. Yii, bir yakın fikstür çerçevesi sağlar. Yii fikstür çerçevesinin temel bir kavramı, fikstür nesnesidir. Bir test ortamının belirli bir yönünü temsil eder. Fikstür nesnesi,yii\test\Fixture class.
Bir fikstürü tanımlamak için, yeni bir sınıf oluşturmalı ve onu yii \ test \ Fixture veya yii \ test \ ActiveFixture'dan genişletmelisiniz. İlki genel amaçlı armatürler için daha iyidir, ikincisi ise özellikle veritabanı ve ActiveRecord ile çalışmak üzere tasarlanmıştır.
Birim Testleri
Birim testleri, bireysel işlevleri test etmenize yardımcı olur. Örneğin, model fonksiyonları veya bir bileşen sınıfı.
Step 1 - adlı dosyada yeni bir fikstür oluşturun ExampleFixture.php altında tests/codeception/fixtures dizin.
<?php
namespace app\tests\codeception\fixtures;
use yii\test\ActiveFixture;
class ExampleFixture extends ActiveFixture {
public $modelClass = ‘app⊨’MyUser';
}
?>
Step 2 - Ardından, testing / codeception / unit / models klasöründe ExampleTest.php adlı yeni bir test dosyası oluşturun.
<?php
namespace tests\codeception\unit\models;
use app\models\MyUser;
use yii\codeception\TestCase;
class ExampleTest extends TestCase {
public function testCreateMyUser() {
$m = new MyUser(); $m->name = "myuser";
$m->email = "[email protected]"; $this->assertTrue($m->save()); } public function testUpdateMyUser() { $m = new MyUser();
$m->name = "myuser2"; $m->email = "[email protected]";
$this->assertTrue($m->save());
$this->assertEquals("myuser2", $m->name);
}
public function testDeleteMyUser() {
$m = MyUser::findOne(['name' => 'myuser2']); $this->assertNotNull($m); MyUser::deleteAll(['name' => $m->name]);
$m = MyUser::findOne(['name' => 'myuser2']); $this->assertNull($m);
}
}
?>
Yukarıdaki kodda üç test tanımlıyoruz -
- testCreateMyUser,
- testUpdateMyUser ve
- testDeleteMyUser.
Yeni bir kullanıcı oluşturduk, adını güncelledik ve onu silmeye çalıştık. Biz yönetiyoruzMyUser gerçek DB'mizin tam bir kopyası olan yii2_basic_tests veritabanı açısından model.
Step 3 - Başlamak için tests, testler klasörüne gidin ve çalıştırın.
codecept run unit models/ExampleTest
Tüm testleri geçmesi gerekir. Aşağıdakileri göreceksiniz -
Fonksiyonel Testler
Fonksiyonel testler size şu konularda yardımcı olur -
- tarayıcı öykünücüsü kullanarak uygulamayı test etme
- işlevin düzgün çalıştığını doğrulayın
- veritabanı ile etkileşim
- verileri sunucu tarafı komut dosyalarına gönder
Testler klasörünün içinde çalıştırın -
generate:cept functional AboutPageCept
Yukarıdaki komut, AboutPageCept.phptest / codeception / fonksiyonel klasörünün altındaki dosya. Bu fonksiyonel testte, bizimabout sayfa var.
Step 1 - Değiştirin AboutPageCept.php dosya.
<?php
$I = new FunctionalTester($scenario); $I->wantTo('perform actions and see result');
$I->amOnPage('site/about'); $I->see('about');
$I->dontSee('apple');
?>
Yukarıda verilen kodda, hakkında sayfasında olup olmadığımızı kontrol ettik. Açıkçası, sayfada 'hakkında' ve 'elma' kelimesini görmemeliyiz.
Step 2 - Testi ile çalıştırın.
run functional AboutPageCept
Aşağıdaki çıktıyı göreceksiniz -