こんにちは!
Perl5 Advent Calender無事に完走することができたようです。ありがとうございます!
拙作のモジュールの紹介をしたいと思います。
マルチプロセスでテストを行いたいケースがときどきあると思います。
たとえば、forkを管理するモジュールをテストしたい場合などです。
そのような場合、結果をプロセス間で共有したい場合があると思います。
そのようなケースで簡単かつアトミックに情報をプロセス間で共有できるのがTest::SharedObjectです。
具体的にはこんな具合で使うことができます。
use strict;
use warnings;
use Test::More tests => 2;
use Test::SharedFork;
use Test::SharedObject;
my $shared = Test::SharedObject->new(0);
is $shared->get, 0;
my $pid = fork;
die $! unless defined $pid;
if ($pid == 0) {# child
$shared->txn(sub {
my $counter = shift;
$counter++;
return $counter;
});
exit;
}
wait;
is $shared->get, 1;
$shared
がコンテナになり、データを共有します。(実体はテンポラリファイルです。)
txnメソッドのコールバックの中はプロセス間でアトミックです。
コールバックの第一引数にコンテナのデータが来ます。returnした値でコンテナが更新されます。
このような具合にアトミックにデータの編集ができるとマルチプロセスのテストが楽に書けます。
ぜひご活用ください!