Yii2 单元测试利器-codeception

Yii 框架提供了初级(Basic)和高级(Advanced)应用程序模板,这两个模板都有简单的 codeception 测试,因此,如果你想开始一个 codeception 测试,你必须下载这两个模板的一个去开始你的项目。

Yii Basic

当你创建一个 Basic 模板的项目,你将会看到 tests 目录和 codeception.yml 配置文件,从一开始就有功能和单元测试套件。

在终端执行下面的指令来运行测试:

./vendor/bin/codecept run

yii-basic-tests

单元测试(Unit Test)

单元测试位于 tests/unit 目录,支持所有类型的单元和整合测试。

每一个测试用例都继承于 Codeception\Test\Unit class(标准的codeception格式的单元测试类),在Yii中开发完全单独的单元测试是相当困难的,所以在每个测试用例之前都会引导一个应用程序,在配置文件tests/unit.suite.yml中启用Yii2模块:

modules:
    enabled:
      - Yii2:
            part: [orm, email]

这个模块为测试用例启动Yii应用程序和为简单测试提供额外的帮助方法,它只有orm和email部分,以便排除功能测试所需的方法。

在测试用例里面通过$this->tester class你可以使用Yii2 module的方法,所以如果你启用了orm和email,那么你就可以在这里调用他的方法:

<?php
// insert records in database
$this->tester->haveRecord('app/model/User', ['username' => 'davert']);
// check records in database
$this->tester->seeRecord('app/model/User', ['username' => 'davert']);
// test email was sent
$this->tester->seeEmailIsSent();
// get a last sent emails
$this->tester->grabLastSentEmail();

如果你启用了fixtures,你可以在你的测试中用这个方法去加载使用fixtures:

<?php
// load fixtures
$this->tester->haveFixtures([
    'user' => [
        'class' => UserFixture::className(),
        // fixture data located in tests/_data/user.php
        'dataFile' => codecept_data_dir() . 'user.php'
    ]
]);
// get first user from fixtures
$this->tester->grabFixture('user', 0);

如果你在测试中启动了Yii2模块,你就可以放心地调用Yii::$app,因为应用程序会在测试之后被初始化和清理。如果你想在你的测试用例添加你的帮助方法或者是定制的断言,你可以不继承Codeception\Test\Unit,而是写你自己单独的帮助方法。如何写 更多的单元测试教程

功能测试(Functional Tests)

当我们测试web程序的真正特性的时候,我们不能仅仅使用单元测试,还有你想去测试程序如何处理接收数据和提供什么样的返回数据,数据如何保存导数据库等等,你可以使用功能测试去测试程序在一个仿真环境,服务器或者浏览器。功能测试的编写比单元测试更简单,它用一个简单的DSL来描述交互场景,所以你不需要直接处理应用程序,而是从用户的角度来描述操作:

<?php
$I->amOnPage(['site/contact']);
$I->submitForm('#contact-form', []);
$I->expectTo('see validations errors');
$I->see('Contact', 'h1');
$I->see('Name cannot be blank');
$I->see('Email cannot be blank');
$I->see('Subject cannot be blank');
$I->see('Body cannot be blank');

这种方式不仅可以测试 ContactForm ,还可以测试到用户看到的应用的真实输出。Codeception 为测试提供了像amOnPage, submitForm, see 这样的标准操作,Yii2模块提供特殊的方法像 amLoggedInAs (快速验证), haveRecord, seeRecord, seeEmailIsSent 等等。查看更多

功能测试应该写在Cest文件中,这是一个由场景驱动的Codeception测试格式。你可以通过下面的命令轻松创建一个新的测试:

./vendor/bin/codecept g:cest functional MyNewScenarioCest

注意:Function 测试非常强大而且简单,强烈推荐使用在任何Yii程序。更多参见Function 测试教程

API 测试

待续……

转载于:https://my.oschina.net/esionwong/blog/1590727

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值