Skip to content

Instantly share code, notes, and snippets.

@sirbrillig
Last active March 26, 2016 21:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sirbrillig/8fab24a05d3d907b9cf7 to your computer and use it in GitHub Desktop.
Save sirbrillig/8fab24a05d3d907b9cf7 to your computer and use it in GitHub Desktop.
An example of using Spies
<?php
class GreetingGenerator {
public function get_greeting( $name ) {
// Assumes determine_greeting is defined in another file
return determine_greeting( $name );
}
}
class Greeter {
public function __construct( $greeting_generator ) {
$this->generator = $greeting_generator;
}
public function greet( $name ) {
return $this->generator->get_greeting( $name ) . ' ' . $name;
}
}
class GreeterTest extends PHPUnit_Framework_TestCase {
public function tearDown() {
\Spies\finish_spying();
}
public function test_greeter_greet_returns_result_of_get_greeting() {
$mock_generator = \Spies\mock_object_of( 'GreetingGenerator' );
$mock_generator->add_method( 'get_greeting' )->when_called->will_return( 'yo' );
$greeter = new Greeter( $mock_generator );
$this->assertEquals( 'yo joe', $greeter->greet( 'joe' ) );
}
public function test_greeter_passes_name_to_get_greeting() {
$mock_generator = \Spies\mock_object_of( 'GreetingGenerator' );
$spy = $mock_generator->spy_on_method( 'get_greeting' );
$greeter = new Greeter( $mock_generator );
$greeter->greet( 'joe' );
// Using an Expectation:
\Spies\expect_spy( $spy )->to_have_been_called->with( 'joe' );
// Or, without using an Expectation:
$this->assertTrue( $spy->was_called_with( 'joe' ) );
}
public function test_greeter_uses_return_value_of_determine_greeting() {
\Spies\stub_function( 'determine_greeting' )->when_called->will_return( 'my good friend' );
$greeter = new Greeter( new GreetingGenerator() );
$this->assertEquals( 'my good friend joe', $greeter->greet( 'joe' ) );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment