iamapen / commentable-data-set
DBUnit 使用的可评论 CSV 数据集
Requires
- php: ^7.2
- ext-mbstring: *
- kornrunner/dbunit: ^5.0
Requires (Dev)
- ext-pdo: *
- phpunit/phpunit: ^8.2|^9.0
README
phpunit/dbunit 用の DataSet や Operation の詰め合わせ。
iamapen/excel-friendly-data-set 的后续。
用「1列目为评论的CSV」表示DB记录的CsvDataSet等。
安装
因为是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
的限制。
- 如果输入CSV非常大,可能会遇到
-
数据集/ExcelCsvDataSet
- 不再推荐。
保存为UTF-8,并使用UTF-8兼容的编辑器进行编辑较好。例如LibreOffice的Calc就可以做到。
尝试在Excel中做的做法,是编辑器不存在的古老时代的方法。 - 在流中执行字符编码转换会更好
- 不再推荐。
-
由于在正式产品中的运行经验很少,因此质量处于业余水平。