NAME

Test::Mock::Guard - Simple mock test library using RAII.

SYNOPSIS

use Test::More;
use Test::Mock::Guard qw(mock_guard);

package Some::Class;

sub new { bless {} => shift }
sub foo { "foo" }
sub bar { 1; }

package main;

{
    my $guard = mock_guard( 'Some::Class', +{ foo => sub { "bar" }, bar => 10 } );
    my $obj = Some::Class->new;
    is( $obj->foo, "bar" );
    is( $obj->bar, 10 );
}

my $obj = Some::Class->new;
is( $obj->foo, "foo" );
is( $obj->bar, 1 );

done_testing;

DESCRIPTION

Test::Mock::Guard is mock test library using RAII. This module is able to change method behavior by each scope. See SYNOPSIS's sample code.

EXPORT FUNCTION

mock_guard( @class_defs )

@class_defs are following format.

key

Specify class name or object as mock.

value

Hash reference. The key as method name, The value is code reference or value. If the value is code reference, it is used as method. If the value is value, the method will return the specified value.

You can change method behavior into specific object. (This feature was provided by cho45) It's like this:

use Test::More;
use Test::Mock::Guard qw(mock_guard);

package Some::Class;

sub new { bless {} => shift }
sub foo { "foo" }

package main;

my $obj1 = Some::Class->new;
my $obj2 = Some::Class->new;

{
    my $obj2 = Some::Class->new;
    my $guard = mock_guard( $obj2, +{ foo => sub { "bar" } } );
    is ($obj1->foo, "foo", "obj1 has not changed" );
    is( $obj2->foo, "bar", "obj2 is mocked" );
}

is( $obj1->foo, "foo", "obj1" );
is( $obj2->foo, "foo", "obj2" );

done_testing;

METHODS

new( @class_defs )

See "mock_guard" definition.

DESTROY

Internal use only.

AUTHOR

Toru Yamaguchi <zigorou@cpan.org>

Yuji Shimada <xaicron at cpan.org>

THANKS TO

cho45 <cho45@lowreal.net>

SEE ALSO

Test::MockObject

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.