Test::Mock::Guard Released - 日向夏特殊応援部隊を見てちょっと使ってみたのでメモ。
最初はこんな感じの使い方をしてた。
package test::Sample; use strict; use warnings; use Path::Class; use lib file(__FILE__)->dir->parent->subdir('lib')->stringify; use base qw(Test::Class); use Test::Mock::Guard qw(mock_guard); use Sample; use Sample::Response::Mock; mock_guard('Sample', +{ _post => sub { my $self = shift; my ($url, $query) = @_; Sample::Response::Mock->new($query); }, }); sub _hoge_hoge : Test(1) { ... } __PACKAGE__->runtests; 1;
でもうまくいかない、なんで?って思ってソース見たら、あるブロック内でのみMockするようにDESTROYを利用しているので、mock_guardの返り値をちゃんと変数にいれとかないといけなかった。
package test::Sample; use strict; use warnings; use Path::Class; use lib file(__FILE__)->dir->parent->subdir('lib')->stringify; use base qw(Test::Class); use Test::Mock::Guard qw(mock_guard); use Sample; use Sample::Response::Mock; my $mock_guard = mock_guard('Sample', +{ _post => sub { my $self = shift; my ($url, $query) = @_; Sample::Response::Mock->new($query); }, }); sub _hoge_hoge : Test(1) { ... } __PACKAGE__->runtests; 1;
って感じで書いたらうまくいきました。SYNOPSISでmock_guardの返り値を変数に入れてた意味がわかりましたってだけでした。終わり。