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. NASA: Seeing Jupiter(注视木星)

    This image of Jupiter’s southern hemisphere was captured by NASA’s Juno spacecraft on the outbound l ...

  2. weblogic 开启注意问题

    1.关闭防火墙 service iptables stop chkconfig iptables off 2.weblogic unable to get file lock问题 我的解决办法是ps ...

  3. 某团队线下赛AWD writeup&Beescms_V4.0代码审计

    还是跟上篇一样.拿别人比赛的来玩一下.  0x01 预留后门 连接方式: 0x02 后台登录口SQL注入 admin/login.php 在func.php当中找到定义的check_login函数 很 ...

  4. ZebraDatepicker中文显示

    解决方法:①<script type="text/javascript" src="xx.js" charset="UTF-8"> ...

  5. Firefox缓存文件夹位置设置及清除缓存方法

    地址栏敲入: about:config, 新建一个"browser.cache.disk.parent_directory", 并设置为你要的缓存文件夹, 例如:  "F ...

  6. GPS位置模拟-安卓

    测试定位功能时都需要位置模拟,一般有如下3种方式: a)手机上安装第三方模拟软件:需要Root: b)PC模拟其中运行app并模拟位置:不能在真机上运行,手机兼容性不能测试到: b)在app中让开发增 ...

  7. 让Linux应用更加得心应手的

    1.计算文件数和目录数  下面的语句可以帮你计算有多少个文件和多少个目录 # ls -l * |grep "^-"|wc -l ---- to count files # ls - ...

  8. 主机名/etc/hosts文件的作用

    1,/etc/hosts,主机名ip配置文件. # Do not remove the following line, or various programs # that require netwo ...

  9. Codeforces Round #423 Div. 2 C-String Reconstruction(思维)

    题目大意:告诉你n个字符串以及这些字符串在字符串s中出现的位置(x1,x2.....xn),要求在满足上述条件的情况下,求出字典序最小的字符串s. 解题思路:主要问题是,如果直接模拟是会超时的,比如v ...

  10. Valid Sudoku&&Sudoku Solver

    Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...