# Furl の mock 書いた {{tag: perl, cpan}} きのう {{cpan: App::aki}} を書いていて、その中では {{cpan: LWP::UserAgent}} を使っているのですが本当は {{cpan: Furl}} を使いたかったりしました。ただ、Furl を使うと、テストを書くのによさげな mock が見つけられなくて、t::Util 的なのに mock 書くとか、fake server な {{cpan: Test::HTTP::Server::Simple}} とか {{cpan: Test::Fake::HTTPD}} でやりくりしようかなあとか思ったんですが、aki は aki でさっさとリリースしたかったのでいったん Furl はあきらめたりしました(実用上はいまのところどちらでも良いので)。 まあでも今後も Furl はいっぱい使うだろうし、mock したい場面はあるだろうなということで、書いてみました。 ## Test::Mock::Furl {{cpan: Test::Mock::Furl}} 以下のような感じです。 use Test::More; use Test::Mock::Furl; use Furl; use Furl::Request; $Mock_furl->mock(request => sub { Furl::Response->new } ); $Mock_furl_res->mock(message => sub { 'ok ok ok' } ); my $req = Furl::Request->new('GET' => 'http://example.com/'); my $furl = Furl->new; my $res = $furl->request($req); ok $res->is_success; is $res->code, 200; is $res->content, ''; is $res->message, 'ok ok ok'; done_testing; コードは {{cpan: Test::Mock::LWP}} からほぼまんまコピーです。 もうちょっとデフォルトでよしなに振舞う感じにしていきたいのと、細かいとこ足りてないと思いますが、なんかこんなんで自分のやりたかったのは満たせそうなんですが、どうでしょうか。