2011年 08月 30日

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;