当我们写一个PHP类,我们一般会一步步或使用 die 或 echo 语句来验证它是如何工作的。
		如果我们开发一个 Web 应用程序,使用表单来进入测试数据,以确保网页如我们预期的那样工作。
	
	
		测试过程可以被自动化。
	
	
		对于长期的项目,自动测试方法是有道理的,这是因为 -
	
	- 
			项目复杂和巨大
- 
			不断地增长
- 
			项目失败的成本过于昂贵
		如果项目没有得到复杂和相对简单,又或者它仅仅是一个一次性的项目,那么自动化测试就是大材小用了。
	
	
		
			准备测试
		
	
	
		第1步 - 安装 Codeception 框架。运行下面的代码。
	
c:\basic>composer global require "codeception/codeception" c:\basic>composer global require "codeception/specify" c:\basic>composer global require "codeception/verify"
		步骤2 - 运行如下
	
c:\basic>composer global status
		输出“Changed current directory to <directory>”如下图所示:
	
	
应该加上'C:/Users/Administrator/AppData/Roaming/Composer/vendor/bin ' 到 PATH 环境变量。在本示例中,运行下面的代码 -
export PATH = $PATH:~/.composer/vendor/bin
		注:windows系统可右键"我的电脑"=>"高级系统设置"=>"环境变量"来添加。
	
	
		第3步 - 创建一个新数据库 “yii2_basic_tests” 
	
	
		第4步 - 测试 tests 目录内运行。
	
C:\basic\tests>codeception/bin/yii migrate 
	数据库配置可以在这里找到:tests/codeception/config/config.php.
		第5步 - 构建测试套件通过如下命令:

	

C:\basic\tests>codecept build
	Fixtures
fixtures 的主要目的是建立环境处于未知状态,这样测试就可以按照预期的方式运行。 Yii提供一个接近固定的框架。在Yii fixture框架中的一个关键概念是 fixture 对象。它代表了测试环境的特定方面。fixture 对象是 yii\test\Fixture 类的一个实例。
		要定义 fixture ,应该创建一个新的类,并从 yii\test\Fixture 或 yii\test\ActiveFixture 扩展。
	
	
		前者是为通用目的会更好,而后者是特别设计用数据库和 ActiveRecord 来工作的。
	
	单元测试
		单元测试帮助你来测试各项功能。例如,模型的功能或组件类。
	
	
		第1步 - 在 tests/codeception/fixtures 目录下创建一个新的 fixture 在 ExampleFixture.php 文件中。
	
<?php
   namespace app\tests\codeception\fixtures;
   use yii\test\ActiveFixture;
   class ExampleFixture extends ActiveFixture {
      public $modelClass = 'app/models/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@xuhuhu.com";
         $this->assertTrue($m->save());
      }
      public function testUpdateMyUser() {
         $m = new MyUser();
         $m->name = "myuser2";
         $m->email = "myser2@xuhuhu.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 数据库,用户模型是数据库完整副本。
	
	
		第3步 - 要开始测试,进入 tests 文件夹内并运行。
	
C:\basic\tests>codecept run unit models/ExampleTest
		它应该通过所有测试。会看到如下输出结果 -

	
	
		
			功能测试
		
	
	
		功能测试可以帮助你  -
	
	- 
			使用浏览器模拟器应用测试
- 
			验证功能的正常使用
- 
			与数据库进行交互
- 
			将数据提交到服务器端脚本
		在 tests 测试文件夹中运行 -
	
c:\basic\tests>codecept 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 页面上。很显然,我们会看到 “about” 单词,并在页面上没有显示 “apple”。
	
	
		第2步 - 通过以下运行测试。
	
run functional AboutPageCept
		将会看到下面的输出如下 -

	

