Fixture

本文主要是介绍关于Fixture,Specify的使用和遇到的坑

部分是根据源码摸索,有差错的部分望指出

Fixture主要是用来提供测试环境下的数据特定的状态

例如:测试中需要一条待评估的方案数据,使用fixture可在测试前自动将所用的特定状态的数据填充入数据库,不用每次重复做不必要的操作

首先,定义用的Fixture CusMainFixture.php ($modelClass 指定你将要测试需要的表)

 namespace tests\codeception\backend\unit\fixtures;

 use yii\test\ActiveFixture;

 class CusMainFixture extends ActiveFixture
{
public $modelClass = 'backend\models\CusMain';
}

然后将你本次测试所需要的特定数据,写入fixture下的data目录下,名为 表名.php--CusMain.php

return [
'user1' => [
'ID' => '1231231',
'CNAME'=>'李时珍',
'SEX'=>'1',
],
'user2' => [
'ID' => '12314231',
'CNAME'=>'努尔哈赤',
'SEX'=>'2',
],
];

你可以给某行指定一个 alias 别名,这样在你以后的测试中,你可以通过别名来确定某行。 在上面的例子中,这两行指定别名为 user1 和 user2。(如果不使用别名,直接使用数组的话可以使用CusMain[0],CusMain[1]调用)

接着就可以使用Fixture了,注意要继承DbTestCase使用,继承就要引用,这里有个坑,在yii的文档中引用的是

use yii\codeception\DbTestCase;

测试时会报错

原因是 他引用的是yii-codeception的,官方也已经停止维护,不推荐使用了,要使用codeception所带的DbTestCase

use tests\codeception\backend\unit\DbTestCase;

通过fixtures方法导入数据

namespace  tests\codeception\backend\unit\models;

use backend\models\CusMain;
use tests\codeception\backend\unit\DbTestCase;
use tests\codeception\backend\unit\fixtures\CusMainFixture; class CusMainTest extends DbTestCase
{
public function fixtures()
{
return [
'Cusmain' => [
'class' => CusMainFixture::className(),
'dataFile' => '@tests/codeception/backend/unit/fixtures/data/CusMain.php'
],
//如果测试同时对多张表进行操作,可以在此继续添加fixture,流程与创建cusmian过程相同
];
}
}

运行测试,可以看到数据库中只有预先fixture的两条特定数据 ;(会清空原有数据插入测试数据)

接下来的测试代码中,发现不能在使用普通的断言了,codeception提供了verify,expect的方法,两者基本等价的

官方介绍

If you follow TDD/BDD you'd rather use expect instead of verify. Which are just an alias functions:

$row = $this->Cusmain['user1'];   //取fixture值
$user = CusMain::findOne(['CNAME' => $row['CNAME']]);
$user ->CNAME = 'wewewe';
//判断是否返回true 或false
verify('false', $user ->save())->true();
//verify(‘返回错误提示’,判断内容)->期望值
// 12314231
//包含 只要是子集就可以
expect('ID is wrong', $user ->ID)->contains('123');
verify('ID is wrong', $user ->ID)->contains('123');
//是否相同
expect('ID is wrong Num', $user ->ID)->equals('1231231');
verify('ID is wrong Num', $user ->ID)->equals('1231231');

如果想使用断言的话,可以使用specify方法

use Codeception\Specify;
........
//断言不成立的时候 返回语句
$this->specify("ID should be 1231231", function() {
$row = $this->Cusmain['user1'];
$user = CusMain::findOne(['CNAME' => $row['CNAME']]);
$this->assertNotEquals('1231231', $user->ID);
});

关于specify和verify的具体用法可以在源码中查询

vendor\codeception\specify\tests\SpecifyTest.php

vendor\codeception\verify\tests\VerifyTest.php

PS:如果报错表不存在,有两种解决方案

1.需要将配置文件db指向所测试的库

2.如果操作跨库多表的情况,将model中代码

    public static function tableName()
{
return 'cus_main';
} public static function getDb()
{
return Yii::$app->get('qmcus');
}

修改成 codeception只获取到tablename的方法

 public static function tableName()
{
return 'qmcus.cus_main';
}

以上是对于单元测试的一段落的总结

不断补充完善

Yii单元测试 codeception-Fixture的使用的更多相关文章

  1. Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通

    Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通Selenium接口性能自动化测试基础部分:分层自动化思想Slenium介绍Selenium1.0/2.0/3.0Slenium R ...

  2. Pytest单元测试框架之FixTure基本使用

    前言: 在单元测试框架中,主要分为:测试固件,测试用例,测试套件,测试执行及测试报告: 测试固件不难理解,也就是我们在执行测试用例前需要做的动作和测试执行后的需要做的事情: 比如在UI自动化测试中,我 ...

  3. python单元测试框架pytest——fixture函数(类似unitest的setup和teardown)

    pytest的setup和teardown函数(曾被一家云计算面试官问到过). pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.与python自带的unitest ...

  4. 基于PhpStorm对Yii框架进行的单元测试一【PhpUnit环境搭建】

    1.下载phpunit.phar 2.在phpstorm中配置phpunit库 3.不同版本phpunit 需要依赖的php解释器也不一样,如果运行时报错 可以适当调整php解释器的版本 至此进行ph ...

  5. Yii 1.1.x 单元测试

    代码若不整洁,只会越来越糟糕:代码写不好,公司要黄是迟早. Yii 的应用有两种,下面记录这两种应用的单元测试方法 webApplication consoleApplication 在protect ...

  6. Pytest单元测试框架之FixTure内置临时文件tmpdir操作

    1.前言:某些接口需要引用上个接口返回的值,作为下个接口的入参,但笔者又不想在本地维护及创建此文件,此时引出fixture内置函数中的临时文件存储tmpdir 2.首先下面的源码是使用flask框架写 ...

  7. unittest单元测试框架之测试环境的初始化与还原(fixture)(五)

    1.方法一:针对每条测试用例进行初始化与还原 import unittest from UnittestDemo.mathfunc import * class TestMathFunc(unitte ...

  8. Yii2中如何使用CodeCeption

    Yii2和CodeCeption CodeCeption是一个全栈的PHP测试框架,关于CodeCeption的介绍见:CodeCeption官方文档. Yii2官方增加了对CodeCeption的支 ...

  9. Codeception 实战

    Codeception 测试 Php 代码 一.一句话概述 使用 cc 进行单元测试,保证现有代码质量,为以后维护与重构提供支撑. 二.目标 安装配置 cc 编写测试代码,简化开发与最大化稳定性和可维 ...

随机推荐

  1. 利用gcc的__attribute__编译属性section子项构建初始化函数表【转】

    转自:https://my.oschina.net/u/180497/blog/177206 gcc的__attribute__编译属性有很多子项,用于改变作用对象的特性.这里讨论section子项的 ...

  2. 如何在Linux下用C/C++语言操作数据库sqlite3(很不错!设计编译链接等很多问题!)

    from : http://blog.chinaunix.NET/uid-21556133-id-118208.html 安装Sqlite3: 从www.sqlite.org上下载Sqlite3.2. ...

  3. MySQL登录问题1045 (28000)处理步骤【原创】

    MySQL登录问题1045 (28000)  俩台服务器主从复制,从的同步账号无法远程登录主服务器.报错ERROR 1045 (28000): Access denied for user 'root ...

  4. 64.Minimum Path Sum---dp

    题目链接:https://leetcode.com/problems/minimum-path-sum/description/ 题目大意:从左上到右下的路径中,找出路径和最小的路径(与62,63题相 ...

  5. bash: composer: command not found

    下载composer到本地:curl -sS https://getcomposer.org/installer | php 移动至系统服务:sudo mv composer.phar /usr/bi ...

  6. PHP的instanceof关键字

    PHP5的另一个新成员是instdnceof关键字.使用这个关键字可以确定一个对象是类的实例.类的子类,还是实现了某个特定接口,并进行相应的操作.在某些情况下,我们希望确定某个类是否特定的类型,或者是 ...

  7. fedora16下更改网卡名字

    fedora16下更改网卡名字   今天由于网络启动出错的原因,在网上搜索,发现大部分人的网卡名字都是eth0,可是我的却是p3p1,所以想改成eth0.   然后google了下,发现设备命名什么的 ...

  8. npm install 装本地一直安装全局问题

    想用npm安装一些模块,不管怎么装,一直装作全局. 以为是node有问题,重装了N次,却还发现这个问题. 困惑几天无果, 偶然间通过此文章发现,npm存在配置文件:https://www.sitepo ...

  9. 20165301 2017-2018-2 《Java程序设计》第七周学习总结

    20165301 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十一章:JDBC与MySQL数据库 MySQL数据库管理系统 启动MySQL数据库服务器 ...

  10. 洛谷 P1652圆 题解

    题目传送门 这道题也就是考你对几何的了解: 圆与圆没有公共点且一个圆在另一个圆外面时,叫做圆与圆相离. 当圆心距大于两圆半径之和时,称为两圆外离: 当圆心距小于两圆半径之差的绝对值时,称为两圆内含. ...