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 -