bendamqui/dbunit-table

此包已废弃,不再维护。作者建议使用bendamqui/arrayql包。

获取dbunit数据集,无需查询数据库。

v2.1.2 2020-01-07 22:11 UTC

README

Build Status Coverage Status Latest Stable Version License: MIT

描述

在使用DbUnit时,一个挑战是编写在数据集修改后仍然有效的测试。随着应用程序的增长,新的测试可能需要修改数据集。直接从测试中访问数据集通常是解决问题的好方法。

此外观允许这样做,而无需查询数据库以避免减慢测试速度。它简单地接收一个PHPUnit\DbUnit\DataSet\ITable实例,这是DbUnit存储用于在每次测试之前填充数据库的数据集的地方。然后它提供允许更精确访问数据的方法,以便使测试代码更简洁。

安装

composer require bendamqui/dbunit-table

基本设置示例

use PHPUnit\Framework\TestCase;
use Bendamqui\DbUnit\FixtureUtil;

class DbUnitUsersTest extends TestCase
{
    /**
     * @var FixtureUtil
     */
    private $users_table;
    
    /**
        * @var array 
    */
    private $data = [];
    
    /**
     * @var YourApp
     */
    private $app;    

    public function setUp()
    {
        parent::setUp();                
        $this->users_table = new FixtureUtil($this->data);
    }   
}

示例

以下是一些基本示例,说明如何利用外观编写在数据集更改时仍然有效的测试,同时保持代码清洁并避免不必要的数据库调用。

public function testGetAllUsers()
{
	$expected = $this->users_table->getRowCount();
	$response = $this->app->get('users');
	$this->assertCount($expected, $response);
}
public function testPendingUserCannotLogIn()
{
	$pending_users = $this->users_table->getWhere(['status' => 'pending']);
	foreach ($pending_users as $user) {
		$response = $this->app->post('login', ['email' => $user['email'], 'pass' => $user['pass']]);
		$this->assertEquals(401, $response->getCode(), 'Pending user should not be able to log in.');
	}
	$this->assertGreaterThan(0, count($pending_users));
}
public function testCannotUpdateUserWithAnInvalidEmail()
{
	// Get a valid payload to update a user and override the email field. 
	$payload = $this->users_table->get(['email' => 'invalid_email']);
	$response = $this->app->put('user', $payload);
	$this->assertEquals(422, $response->getCode(), 'User update with invalid email should receive a bad request response');
}	

API

可见性 功能
public get(array $override=array(), int $row=0) : array
获取一行。
public getAll(array $override=array()) : array
获取所有行。
public getAllRaw() : array
以原始格式获取所有行(跳过后处理)。
public getByPrimaryKey(mixed $id, array/mixed $override=array()) : array
通过主键获取一行
public getRaw(int $row=0) : array
通过行号获取一行(跳过后处理)。
public getRowCount() : int
获取表中的行数
public getValue(mixed $column, int $row=0) : mixed
获取表中的给定行/列的值。
public getWhere(array $filters=array()) : array
使用键值形式使用过滤器获取多行。仅执行AND。
public setHidden(array $hidden) : void
设置在获取行时不应返回的列列表
public setPrimaryKey(string $primary_key) : void
设置表的键。默认为'id'。