Test2::Tools::Mock - Class/Instance mocking for Test2.
Mocking is often an essential part of testing. This library covers some of the most common mocking needs. This plugin is heavily influenced by Mock::Quick, but with an improved API. This plugin is also intended to play well with other plugins in ways Mock::Quick would be unable to.
my $mock = mock 'Some::Class' => ( add => [ new_method => sub { ... }, ], override => [ replace_method => sub { ... }, ], ); Some::Class->new_method(); # Calls the newly injected method Some::Class->replace_method(); # Calls our replacement method. $mock->override(...) # Override some more $mock = undef; # Undoes all the mocking, restoring all original methods. my $simple_mock = mock {} => ( add => [ is_active => sub { ... } ] ); $simple_mock->is_active(); # Calls our newly mocked method.
This is a one-stop shop function that delegates to one of the other methods depending on how it is used. If you are not comfortable with a function that has a lot of potential behaviors, you can use one of the other functions directly.
Check if an object or class is mocked. If it is mocked the $mock object (Test2::Mock) will be returned.
$mock
These forms delegate to mock_class() to mock a package. The third form is to be explicit about what type of mocking you want.
mock_class()
These forms delegate to mock_obj() to create instances of anonymous packages where methods are vivified into existence as needed.
mock_obj()
These forms go together, the first form will set $mock as the current mock build, then run the sub. Within the sub you can declare mock specifications using the second form. The first form delegates to mock_build().
mock_build()
The second form calls the specified method on the current build. This second form delegates to mock_do().
mock_do()
This method lets you quickly generate a blessed object. The object will be an instance of a randomly generated package name. Methods will vivify as read/write accessors as needed.
Arguments can be any method available to Test2::Mock followed by an argument. If the very first argument is a hashref then it will be blessed as your new object.
If you provide a coderef instead of key/value pairs, the coderef will be run to build the mock. (See the "BUILDING MOCKS" section).
This will create a new instance of Test2::Mock to control the package specified. If you give it a blessed reference it will use the class of the instance.
Set $mock as the current build, then run the specified code. $mock will no longer be the current build when the sub is complete.
Get the current building $mock object.
Run the specified method on the currently building object.
Generate a read/write accessor for the specified field. This will generate a sub like the following:
$sub = sub { my $self = shift; ($self->{$field}) = @_ if @_; return $self->{$field}; };
Generate a read only accessor for the specified field. This will generate a sub like the following:
$sub = sub { my $self = shift; return $self->{$field}; };
Generate a write accessor for the specified field. This will generate a sub like the following:
$sub = sub { my $self = shift; ($self->{$field}) = @_; };
Generates several read/write accessors at once, returns key/value pairs where the key is the field name, and the value is the coderef.
Generates several read only accessors at once, returns key/value pairs where the key is the field name, and the value is the coderef.
Generates several write accessors at once, returns key/value pairs where the key is the field name, and the value is the coderef.
my $mock = mock(...);
Mock objects are instances of Test2::Mock. See it for their methods.
The source code repository for Test2-Suite can be found at https://github.com/Test-More/Test2-Suite/.
Copyright 2018 Chad Granum <exodist@cpan.org>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://dev.perl.org/licenses/
To install Test2::Suite, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Test2::Suite
CPAN shell
perl -MCPAN -e shell install Test2::Suite
For more information on module installation, please visit the detailed CPAN module installation guide.