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
你将会看到以下输出 −