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

NAME  SYNOPSIS  DESCRIPTION  EXPORT FUNCTION  mock_guard( @class_defs )  METHODS  new( @class_defs )  call_count( $class_name_or_object, $method_name )  AUTHOR  THANKS TO  SEE ALSO  LICENSE 

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 have the following format.

key

Class name or object to mock.

value

Hash reference. Keys are method names; values are code references or scalars. If the value is code reference, it is used as a method. If the value is a scalar, the method will return the specified value.

You can mock instance methods as well as class methods (this feature was provided by cho45):

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.

call_count( $class_name_or_object, $method_name )

Returns a number of calling of $method_name in $class_name_or_object.

AUTHOR

Toru Yamaguchi <[email protected]>

Yuji Shimada <xaicron at cpan.org>

Masaki Nakagawa <[email protected]>

THANKS TO

cho45 <[email protected]>

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.


Updated 2024-01-29 - jenkler.se | uex.se