NAME
Test::EasyMock - A mock library which is usable easily.
SYNOPSIS
create_mock
expect
replay
verify
reset
)
;
my
$mock
= create_mock();
expect(
$mock
->foo(1))->and_scalar_return(
'a'
);
expect(
$mock
->foo(2))->and_scalar_return(
'b'
);
replay(
$mock
);
$mock
->foo(1);
# return 'a'
$mock
->foo(2);
# return 'b'
$mock
->foo(3);
# Unexpected method call.(A test is failed)
verify(
$mock
);
# verify all expectations is invoked.
reset
(
$mock
);
expect(
$mock
->foo(1, 2)->and_array_return(
'a'
,
'b'
);
expect(
$mock
->foo({
value
=> 3 })->and_array_return(
'c'
);
replay(
$mock
);
$mock
->foo(1, 2);
# return ('a', 'b')
$mock
->foo({
value
=> 3 });
# return ('c')
verify(
$mock
);
reset
(
$mock
);
expect(
$mock
->foo(1))->and_scalar_return(
'a'
);
expect(
$mock
->foo(1))->and_scalar_return(
'b'
);
replay(
$mock
);
$mock
->foo(1);
# return 'a'
$mock
->foo(1);
# return 'b'
$mock
->foo(1);
# Unexpected method call.(A test is failed)
verify(
$mock
);
Using Test::Deep
's special comparisons.
create_mock
expect
replay
verify
reset
whole
)
;
ignore
)
;
my
$mock
= create_mock();
expect(
$mock
->foo(1, ignore())->and_scalar_return(
'a'
);
expect(
$mock
->foo({
value
=> 1,
random
=> ignore() })->and_scalar_return(
'b'
);
replay(
$mock
);
$mock
->foo(1, 1234);
# return 'a'
$mock
->foo({
value
=> 1,
random
=> 1234 });
# return 'b'
verify(
$mock
);
reset
(
$mock
);
expect(
$mock
->foo(whole(ignore())))->and_stub_scalar_return(
'a'
);
replay(
$mock
);
$mock
->foo();
# return 'a'
$mock
->foo(1, 2, 3);
# return 'a'
$mock
->foo({
arg1
=> 1,
arg2
=> 2 });
# return 'a'
verify(
$mock
);
Mock to class method.
expect
replay
verify
)
;
create_class_mock
)
;
my
$mock
= create_class_mock(
'Foo::Bar'
);
expect(
$mock
->foo(1))->and_scalar_return(
'a'
);
replay(
$mock
);
Foo::Bar->foo(1);
# return 'a'
Foo::Bar->foo(2);
# Unexpected method call.(A test is failed)
verify(
$mock
);
# verify all expectations is invoked.
DESCRIPTION
This is mock library modeled on 'EasyMock' in Java.
FUNCTIONS
create_mock([$module_name|$object])
Creates a mock object. If specified the $module_name then a isa($module_name) method of the mock object returns true.
expect(<a mock method call>)
Record a method invocation and behavior.
The following example is expecting the foo method invocation with $arguments and a result of the invocation is 123.
expect(
$mock
->foo(
$arguments
))
->and_scalar_return(123);
And the next example is expecting the foo method invocation without an argument and a result of the invocation is (1, 2, 3).
expect(
$mock
->foo())
->and_array_return(1, 2, 3);
A list of and_* methods.
- and_scalar_return($value)
-
Add scalar result to the expectation.
- and_array_return(@values)
-
Add array result to the expectation.
- and_list_return(@values)
-
Add list result to the expectation.
- and_answer($code)
-
Add code to the expectation, it calculate an answer.
- and_die([$message])
-
Add die behavior to the expectation.
- and_stub_scalar_return($value)
-
Set scalar result as a stub to the expectation.
- and_stub_array_return(@values)
-
Set array result as a stub to the expectation.
- and_stub_list_return(@values)
-
Set list result as a stub to the expectation.
- and_stub_answer($code)
-
Add code as a stub to the expectation, it calculate an answer.
- and_stub_die([$message])
-
Set die behavior as as stub to the expectation.
replay($mock [, $mock2 ...])
Replay the mock object behaviors which is recorded by the expect function.
replay(
$mock
);
verify($mock)
Verify the mock method invocations.
reset($mock)
Reset the mock.
whole($arguments)
It is a kind of an argument matcher. The matcher considers that the whole argument is array ref.
# same as `expect($mock->foo(1, 2))`
expect(
$mock
->foo( whole([1, 2]) ));
# matches any arguments. (eg. foo(), foo(1,2), foo({}), etc...)
expect(
$mock
->foo( whole(ignore()) ));
AUTHOR
keita iseki <keita.iseki+cpan at gmail.com>
LICENCE AND COPYRIGHT
Copyright (c) 2012, keita iseki <keita.iseki+cpan at gmail.com>
. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.
SEE ALSO
- EasyMock
-
It is a very wonderful library for the Java of a mock object.
- Test::Deep
-
http://search.cpan.org/~rjbs/Test-Deep-0.110/lib/Test/Deep.pm
- Test::EasyMock::Class
-
http://search.cpan.org/~kiseki/Test-EasyMock/lib/Test/EasyMock/Class.pm