Yii-테스트

PHP 클래스를 작성할 때 단계별로 디버그하거나 die 또는 echo 문을 사용하여 작동 방식을 확인합니다. 웹 애플리케이션을 개발하는 경우 페이지가 예상대로 작동하는지 확인하기 위해 양식에 테스트 데이터를 입력합니다. 이 테스트 프로세스는 자동화 될 수 있습니다.

자동 테스트 접근 방식은 다음과 같은 장기 프로젝트에 적합합니다.

  • 복잡하고 큰
  • 지속적으로 성장
  • 실패 비용 측면에서 너무 비쌉니다.

프로젝트가 복잡하지 않고 상대적으로 간단하거나 일회성 프로젝트 인 경우 자동화 된 테스트가 과잉 일 수 있습니다.

시험 준비

Step 1− Codeception 프레임 워크를 설치합니다. 다음 코드를 실행하십시오.

composer global require "codeception/codeception = 2.0.*"
composer global require "codeception/specify = *"
composer global require "codeception/verify = *"

Step 2 − 다음을 실행합니다.

composer global status

출력은“현재 디렉토리를 <디렉토리>로 변경했습니다.”입니다. PATH 변수에 '<directory> / vendor / bin'을 추가해야합니다. 이 경우 다음 코드를 실행하십시오.

export PATH = $PATH:~/.composer/vendor/bin

Step 3 −라는 새 데이터베이스를 만듭니다. 'yii2_basic_tests'.

Step 4 − 테스트 디렉토리 내부에서 실행합니다.

codeception/bin/yii migrate

데이터베이스 구성은 다음 위치에서 찾을 수 있습니다. tests/codeception/config/config.php.

Step 5 − 다음을 통해 테스트 스위트를 구축하십시오.

codecept build

비품

픽스처의 주요 목적은 테스트가 예상대로 실행되도록 알 수없는 상태로 환경을 설정하는 것입니다. Yii는 거의 고정 프레임 워크를 제공합니다. Yii 조명기 프레임 워크의 핵심 개념은 조명기 객체입니다. 테스트 환경의 특정 측면을 나타냅니다. 조명기 객체는yii\test\Fixture class.

조명기를 정의하려면 새 클래스를 만들고 yii \ test \ Fixture 또는 yii \ test \ ActiveFixture에서 확장해야합니다. 전자는 범용 픽스처에 더 적합하고 후자는 데이터베이스 및 ActiveRecord와 함께 작동하도록 특별히 설계되었습니다.

단위 테스트

단위 테스트는 개별 기능을 테스트하는 데 도움이됩니다. 예를 들어, 모델 함수 또는 구성 요소 클래스입니다.

Step 1 − 파일에 새로운 조명기를 만듭니다. ExampleFixture.php 아래의 tests/codeception/fixtures 예배 규칙서.

<?php
   namespace app\tests\codeception\fixtures;
   use yii\test\ActiveFixture;
   class ExampleFixture extends ActiveFixture {
      public $modelClass = ‘app⊨’MyUser';
   }
?>

Step 2 − 그런 다음 tests / codeception / unit / models 폴더에 ExampleTest.php라는 새 테스트 파일을 만듭니다.

<?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);
      }
   }
?>

위의 코드에서 세 가지 테스트를 정의합니다.

  • testCreateMyUser,
  • testUpdateMyUser 및
  • testDeleteMyUser.

새 사용자를 만들고 이름을 업데이트 한 다음 삭제하려고했습니다. 우리는MyUser 실제 DB의 완전한 사본 인 yii2_basic_tests 데이터베이스 측면에서 모델입니다.

Step 3 − 시작하려면 tests, 테스트 폴더로 이동하여 실행하십시오.

codecept run unit models/ExampleTest

모든 테스트를 통과해야합니다. 다음을 볼 수 있습니다-

기능 테스트

기능 테스트는 다음에 도움이됩니다.

  • 브라우저 에뮬레이터를 사용하여 애플리케이션 테스트
  • 기능이 제대로 작동하는지 확인
  • 데이터베이스와 상호 작용
  • 서버 측 스크립트에 데이터 제출

테스트 폴더 내에서 실행-

generate:cept functional AboutPageCept

위의 명령은 AboutPageCept.phptests / codeception / functional 폴더 아래에있는 파일입니다. 이 기능 테스트에서 우리는about 페이지가 있습니다.

Step 1 − 수정 AboutPageCept.php 파일.

<?php
   $I = new FunctionalTester($scenario); $I->wantTo('perform actions and see result');
   $I->amOnPage('site/about'); $I->see('about');
   $I->dontSee('apple');
?>

위의 주어진 코드에서 정보 페이지에 있는지 확인했습니다. 분명히 우리는 페이지에 'about'이라는 단어가 표시되고 'apple'은 표시되지 않아야합니다.

Step 2 − 다음을 통해 테스트를 실행합니다.

run functional AboutPageCept

다음 출력이 표시됩니다.