Test::Mock::Guard::Instance
Test::Mock::Guard にとりこまれたので、そちらで使えます。xaicron さん++
Test::Mock::Guard みたいなやつで、インスタンスごとにメソッド差し替えをしたいので書いてみました。rebless せずに (特異クラスみたいなのを作らずに) なんとかしているので、ref() の結果が変わらなくて便利な気がします。
use Test::Mock::Guard::Instance qw(mock_guard_instance);
{ package Some::Class;
sub new { bless {} => shift }
sub foo { "foo" }
sub bar { 1 }
};
my $obj1 = Some::Class->new;
{
my $guard1 = mock_guard_instance($obj1, +{ foo => sub { "bar" }, bar => 10 } );
is $obj1->foo, "bar";
is $obj1->bar, 10;
my $another = Some::Class->new;
is $another->foo, "foo";
is $another->bar, 1;
};
is $obj1->foo, "foo";
is $obj1->bar, 1;