简介
Codeception是PHP的现代全栈测试框架。 受BDD的启发,它为您提供了一种绝对新的编写验收、功能和单元测试的方式。 由PHPUnit提供支持。
尽管TDD(测试驱动开发)受到广泛普及,但一些PHP开发人员从来没有为他们的应用程序编写自动化测试,主要是因为他们认为它很难、慢或无聊。Codeception框架是为了实际测试而开发的。 它允许以单一、连贯的方式进行编写单元、功能、集成和验收测试。
它可以称为BDD(行为驱动开发)框架。 所有的Codeception测试都以描述性方式编写。 只要看着测试本体,您就可以清楚地了解正在测试的内容以及如何进行测试。 即使是具有许多断言的复杂测试也是用简单的PHP域特定语言(DSL)编写的。
Yii2下的Codeception单元测试
因为近期开发项目一直使用Yii2框架。因此本文将介绍Yii2下的codeception的使用。
另外Codeception官方也提供了许多框架的文档。
Yii2: http://codeception.com/for/yii
Laravel: http://codeception.com/for/laravel
Wordpress: http://codeception.com/for/wordpress
Symfony: http://codeception.com/for/symfony
安装部署
1 | composer require "codeception/codeception" --dev |
我在安装的时候,发现Yii2已经集成了该插件,但是缺少”guzzlehttp/guzzle”依赖无法运行。于是我执行了。composer require guzzlehttp/guzzle
** 2018年1月23日 11:04:07更新一些遇到的坑:**
运行时可能会遇到各种神奇的错误,这个时候一定要注意你的PHP版本。如果是PHP7版本,记的wget http://codeception.com/codecept.phar 。 不然你将遇到各种类找到等奇奇怪怪的错误…PHP5版本wget http://codeception.com/php5/codecept.phar
因为文章时效性,具体准确链接以官方网站为准。
在测试时,如果是高级模板(yii2-advanced-template),单元测试将区分不同的目录,在backend、frontend、common分别会有一个test文件夹,用于单元测试。
如果测试后台应用,就切换到backend目录,运行codecept run。如果想测试所有,则在项目根目录运行codecept run。
初始化
1
codecept bootstrap
配置数据库
在上面我们说过,yii2的单元测试是区分目录的,数据库配置也是单独的。
在config目录下,会有一个test.php和test-local.php存放单元测试的配置信息。
我们需要将backend、frontend、common目录下的config目录分别配置。其配置和main里的配置类似
在进行单元测试的时候,最好使用单独的测试数据库,以免在进行单元测试的时候,某些操作将数据库清空。
运行
1
codecept run
默认是没有codecept命令的,需要配置一下。
windows在环境变量Path里加入 D:\Path\to\project\vendor\codeception\base通过模板创建测试
generate:cept suite filename - Generates a sample Cept scenario
generate:cest suite filename - Generates a sample Cest test
generate:test suite filename - Generates a sample PHPUnit Test with Codeception hooks
generate:phpunit suite filename - Generates a classic PHPUnit Test
generate:suite suite actor - Generates a new suite with the given Actor class name
generate:scenarios suite - Generates text files containing scenarios from tests
generate:helper filename - Generates a sample Helper File
generate:pageobject suite filename - Generates a sample Page object
generate:stepobject suite filename - Generates a sample Step object
generate:environment env - Generates a sample Environment configuration
generate:groupobject group - Generates a sample Group Extension
PS:本来对这些英文进行了翻译,但是怕翻译不准确,这里还是看英文比较舒服。
- 对自己写的Helper函数进行测试
- 首先创建单元测试模板。
1
codecept g:test unit \libraries\\DataHelper
- 编写测试方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public function testRemoveSpace()
{
$arr = [
'半角空格'=>['123'=>' 123 ','你好'=>' 你好 '],
'全角空格'=>['123'=>' 123 ','你好'=>' 你好 '],
'Tab空格' =>['123'=>"\t123\t",'你好'=>"\t你好\t"],
'混合空格'=>['你好,123'=>"\t 你好,123\t "],
];
foreach ($arr as $key => $list){
foreach ($list as $k => $value){
$result = DataHelper::removeSpace($value);
expect('函数存在遗漏:'.$key, $result == $k)->true();
}
}
} - 进行单元测试
1
codecept run
说明函数没有问题。我们来将函数故意写错,看一下是否可以报错。
我们故意在半角空格处写错,发现可以报错。
文章评论