ちょっと作ってみた。
→ taiyoh/p5-Test-Factory · GitHub
PerlだとO/R Mapperが乱立しまくってて何かに依存したモジュールにするのは汎用性が低すぎてないわー、って感じだったので、DBIとSQL::MakerでDB毎の処理は抽象化させて、SQL的にはinsertだけに絞って機能を提供するようにした。その点ではRubyはActiveRecordの影響力が絶大で楽。
factory_girlほど高機能じゃないけど、作ったパターンをベースに統一されたインターフェイスからデータオブジェクトを生成できる(&DBにそのデータを突っ込む)、ってことについてはとりあえずできる。
package Foo; use Test::Factory; my $foo_counter = 0; factory foo => { col1 => 'hoge', col2 => 'fuga', col3 => 'piyo', col4 => sub { ++$foo_counter } }; package main; # O/R Mapperではないので、内部でDBI使って自前でinsertする Foo->dsn("dbi:mysql:dbname;host=localhost", 'db username', 'db password', {}); my $f1 = Foo->build('foo'); print $f1->created; # => 0 (false) print $f1->col4; # => 1 my $f2 = Foo->build('foo'); print $f2->col4; # => 2 $f1->save; # insert into foo (col1, col2, col3, col4) values (?, ?, ?, ?) /* hoge, fuga, piyo, 1 */ my $f3 = Foo->create('foo'); print $f3->created; # => 1 (true) print $f3->col4; # => 3