logo头像

Hello World

Codeception(二)

前言

上文介绍了如何安装部署Codeception,并进行了简单的单元测试。本文将从Codeception的目录结构讲起,了解目录结构,和配置文件。并具体讲解单元测试的相关内容。功能测试和验收测试将在后面的文章来写。

一些预备知识点击名称以访问
断言概念
断言概念及使用

Actors概念

Actiors是Codeception的一个重要概念,用来表示测试一个人行为。我们有一个UnitTester来执行单元测试代码;我们还有一个FunctionalTester,负责功能测试,采用内部的知识来把应用程序当作一个整体来测试;还有一个AcceptanceTester,以用户方式通过我们提供的界面检查应用程序的工作。

Actor类不需要写,而是通过套件生成。 Actor类的方法都是通过Codeception模块生成的,每个模块为不同的测试目的提供预定义的动作,并且它们可以被组合以适应测试环境,Codeception尝试通过这些模块解决可能存在的90%的问题,所以你不必另起炉灶。我们认为你可以花更多的时间写测试和支撑代码以使得这些测试得以运行。默认情况下AcceptanceTester依赖于PhpBrowser模块,它们在tests/acceptance.suite.yml配置文件中[1]

1
2
3
4
5
6
class_name: AcceptanceTester
modules:
enabled:
- PhpBrowser:
url: http://localhost/myapp/
- HelperAcceptance

目录结构

这里我们来了解一下codeception的目录结构。用于正确的使用Codeception
目录结构

以上截图来自common目录。下面来贴一份干净的目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
common
->tests
   -->_data//存放测试数据
   -->_output//测试输出目录
   -->_support
     --->_generated//Build Task 自动生成
       ---->AcceptanceTesterActions.php
---->FunctionalTesterActions.php
---->UnitTesterActions.php
     --->Helper//定义用户行为
       ---->Acceptance.php
---->Functional.php
---->Unit.php
   -->acceptance//验收测试存放目录
     --->_bootstrap.php
   -->functional//功能测试
     --->_bootstrap.php
   -->unit//单元测试
     --->_bootstrap.php
-->_bootstrap.php
   -->acceptance.suite.yml//验收测试配置
   -->functional.suite.yml//功能测试配置
   -->unit.suite.yml//单元测试配置
 ->codeception.yml

data文件夹存放我们预先定义好的数据,在测试的时候可以使用这些数据。当然像我们上篇文章一样直接写到单元测试方法里是也可以的。放到该目录更符合规范,目录清晰.

Helper文件夹存放我们测试时候需要用到的帮助类。

一般情况下,我们自己编写的单元测试文件将按照不同的测试存放到acceptance、functional、unit里面。

每个目录都有一个_bootstrap文件,在执行测试的时候会预先执行该文件内容。

对于Yii来说,_bootstrap文件用于载入yii框架及其配置。这样就不会出现找不到框架某类的情况了。方便我们调试基于框架的代码。

单元测试

Codeception使用phpUnit作为运行其测试的后端。因此,任何phpUnit测试都可以添加到代码测试套件中,然后执行。如果你曾经写过phpUnit测试,那么就像以前一样编写即可。
上文中我们通过

1
codecept g:test unit \libraries\\DataHelper

创建了单元测试模板,模板的结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

class DataHelper extends \Codeception\Test\Unit
{
/**
* @var \UnitTester
*/
protected $tester;

protected function _before()
{
}

protected function _after()
{
}

// tests
public function testMe()
{

}
}

before和after方法用于在每次测试中创建一个测试对象,然后再销毁。分别对应PHPUnit里的setUp和tearDown。

而以test开头的方法是单元测试方法。

  • 测试方法
    在测试中,我们可以使用断言进行单元测试。

    比如$this->assertTrue(Condition);

    而Codeception也使用expect封装了很多断言测试。

    1
    2
    3
    4
    5
    //except('错误时提示信息',condition条件)->期望结果方法
    expect('函数存在遗漏:', $result == $k)->true();
    //判断$result变量值和$k值是否相等。
    expect('ID is wrong', $user ->ID)->contains('123');
    //判断$user->ID是否包含123
  • except提供的期望值判断方法
    全部方法存在于文件

    1
    \vendor\codeception\verify\src\Codeception\Verify.php

    下面列举出部分方法

    • equals 相等
    • contains 包含
    • greaterThan 大于
    • lessThan 小于
    • greaterOrEquals 大于等于
    • true 真
    • notNull 不为null
    • isEmpty 是否是空
  • unit.suite.yml配置文件//TODO

    1
    2
    3
    4
    modules:
    enabled:
    - Yii2:
           part: [email]

    此模块启动yii应用程序的测试用例,并提供其他辅助方法来简化测试。它只有mail,以便排除功能测试中的其它方法。

    通过访问测试用例中的$ this-> tester类,可以使用yii2模块的方法

文章部分内容摘自以下链接,内容有删改:
https://www.cloudxns.net/Support/detail/id/939.html
http://www.kkh86.com/it/codeception/guide-create-project.html
http://codeception.com/for/yii

上一篇