iamapen/commentable-data-set

DBUnit 使用的可评论 CSV 数据集

5.0.1 2020-01-29 14:31 UTC

This package is auto-updated.

Last update: 2024-09-06 06:15:17 UTC


README

phpunit/dbunit 用の DataSet や Operation の詰め合わせ。
iamapen/excel-friendly-data-set 的后续。

用「1列目为评论的CSV」表示DB记录的CsvDataSet等。

CircleCI

安装

因为是UT用,所以需要 require --dev

composer require --dev iamapen/commentable-data-set

手动在 composer.json 中写入的情况

require-dev: {
  "iamapen/commentable-data-set ": "^4.0"
}

用法

数据集

数据集/CommentableDataSet

CSV的左n列作为注释列处理,忽略(不导入)功能的CsvDataSet。
可用于测试数据的注释列。

$ds = new \Iamapen\CommentableDataSet\DbUnit\DataSet\CommentableCsvDataSet();
$ds->addTable('users', '/PATH/TO/users.csv');
$ds->setIgnoreColumnCount(1);    // 1列目をコメント列とする

CSV示例

最初の列はコメント,id,user_name
男性ユーザ,1,taro soramame
女性女性ユーザ,2,arare norimaki
1ヶ月以上ログインしてないユーザ,3,akane kimidori
削除されるユーザ,4,gajira norimaki

当然也可以与其他DataSet进行比较

class XxxTest extends \PHPUnit\DbUnit\TestCase {
  function testXXX() {
      $this->assertDataSetsEqual($ds1, $ds2);
  }
}

数据集/ExcelCsvDataSet (已弃用)

最初创建的DataSet。
在读取的同时将UTF-16-LE(+BOM)的CSV转换为UTF-8的DataSet。
现在似乎没有使用的机会。

当时是因为UTF-8的CSV编辑软件很少,所以基于这个原因制作的。
但现在,LibreOffice-Calc等编辑器可以轻松编辑UTF-8的CSV,所以也没有必要特意用UTF-16保存。

以下为旧的README。

Excel中无法正常编辑(特别是保存)UTF-8的csv,但使用UTF-16-LE(+BOM)则可以通过“拖放打开”、“Ctrl+S”保存等相对自然地编辑,并且可以使用Unicode字符作为测试数据。

代替方法是需要在测试代码中进行UTF-16 -> UTF-8转换,因此需要进行此操作。

另外,Excel可以“Unicode”,sakura编辑器可以“Unicode”,vim可以“utf16le”,mbstring可以“UTF-16”处理。在创建新CSV时,最好在文本编辑器中创建UTF-16的文件,然后将其拖放到Excel中。

xxTest.php

$ds = new Iamapen\ExcelFriendlyDataSet\Database\DataSet\ExcelCsvDataSet();

操作

操作/MySqlBulkInsert

PHPUnit_Extensions_Database_Operation_Insert 的批量插入版本。
仅限MySQL使用。(SQLite也勉强可以使用)

如果输入CSV非常大,可能会遇到 max_allowed_packet 的限制。这是一个问题。

use Iamapen\CommentableDataSet\DbUnit\DataSet\CommentableCsvDataSet;
use Iamapen\CommentableDataSet\DbUnit\Operation\MySqlBulkInsert;

// DataSet
$ds = new CommentableCsvDataSet();
$ds->addTable('/PATH/TO/CSV');

// 実行 (TRUNCATE -> BULK INSERT)
$con = new \PHPUnit\DbUnit\Database\DefaultConnection($pdo);
\PHPUnit\DbUnit\Operation\Factory::TRUNCATE()->execute($con, $ds);
(new MySqlBulkInsert())->execute($con, $ds);

注意点・課題

  • 操作/MySqlBulkInsert

    • 如果输入CSV非常大,可能会遇到 max_allowed_packet 的限制。
  • 数据集/ExcelCsvDataSet

    • 不再推荐。
      保存为UTF-8,并使用UTF-8兼容的编辑器进行编辑较好。例如LibreOffice的Calc就可以做到。
      尝试在Excel中做的做法,是编辑器不存在的古老时代的方法。
    • 在流中执行字符编码转换会更好
  • 由于在正式产品中的运行经验很少,因此质量处于业余水平。

版本