Yii Testing测试
当我们编写一个PHP类时,我们逐步调试或使用die或echo语句来验证其工作方式。如果我们开发一个Web应用程序,我们在表单中输入测试数据以确保页面按照我们的预期工作。这个测试过程可以自动化进行。
自动化测试方法对于长期项目是有意义的,这些项目具有以下特点:
- 复杂且庞大
 - 不断增长
 - 以错误成本来衡量非常昂贵
 
如果你的项目没有变得复杂,或者相对简单,或者只是一个一次性项目,那么自动化测试可能会过度。
测试准备工作
步骤1 − 安装Codeception框架。运行以下代码。
composer global require "codeception/codeception = 2.0.*"
composer global require "codeception/specify = *"
composer global require "codeception/verify = *"
步骤2 - 运行以下命令。
composer global status
输出结果是“当前目录已更改为<directory>。你应该将<directory>/vendor/bin添加到你的PATH变量中。在这种情况下,运行以下代码:
export PATH = $PATH:~/.composer/vendor/bin
步骤3 − 创建一个名为 ‘yii2_basic_tests’ 的新数据库。
步骤4 − 在tests目录中运行。
codeception/bin/yii migrate
数据库配置可以在 tests/codeception/config/config.php 中找到。
步骤5 - 通过以下方式构建测试套件。
codecept build
固定设备
固定设备的主要目的是在未知状态下设置环境,以使您的测试以预期的方式运行。Yii提供了一个接近固定设备框架的工具。Yii固定设备框架的一个关键概念是固定设备对象。它代表测试环境的特定方面。固定设备对象是 yii\test\Fixture类 的一个实例。
要定义一个固定设备,您应该创建一个新的类,并从yii\test\Fixture或yii\test\ActiveFixture扩展它。前者适用于通用固定设备,而后者专门设计用于与数据库和ActiveRecord一起使用。
单元测试
单元测试帮助您测试单个函数。例如,模型函数或组件类。
步骤1 - 在 tests/codeception/fixtures 目录下创建一个名为 ExampleFixture.php 的新固定设备文件。
<?php
   namespace app\tests\codeception\fixtures;
   use yii\test\ActiveFixture;
   class ExampleFixture extends ActiveFixture {
      public $modelClass = ‘app⊨’MyUser';
   }
?>
步骤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 = "myser@email.com";this->assertTrue(m->save());
      }
      public function testUpdateMyUser() {m = new MyUser();
         m->name = "myuser2";m->email = "myser2@email.com";
         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。
 
我们刚刚创建了一个新用户,更新了他的名字,并试图删除他。我们根据 yii2_basic_tests 数据库管理 MyUser 模型,这是我们真实数据库的一个完整副本。
步骤3 - 要开始进行测试,进入 tests 文件夹并运行。
codecept run unit models/ExampleTest
它应该通过所有的测试。您将会看到以下内容−

功能测试
功能测试可以帮助您进行以下操作:
- 使用浏览器模拟器对应用程序进行测试
 - 验证功能正常工作
 - 与数据库进行交互
 - 将数据提交给服务器端脚本
 
在测试文件夹内执行以下操作:
generate:cept functional AboutPageCept
上述命令在 tests/codeception/functional 文件夹下创建了 AboutPageCept.php 文件。在这个功能测试中,我们将检查我们的 about 页面是否存在。
步骤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’。
步骤2 - 通过运行测试。
run functional AboutPageCept
你将会看到以下输出 −

极客教程