Updated: 17 September 2022
Dummy
$dummy = $this->prophesize(SomeClass::class);
$sut->action($dummy->reveal());
// with phpspec
class MarkdownSpec extends ObjectBehavior
{
function it_converts_text_from_an_external_source(Reader $reader)
{
// $reader is a Dummy at this point because we've added
// no behaviour nor made any assertions on its methods.
}
}
Stub
$stub = $this->prophesize(SomeClass::class);
$stub->getSomething()->willReturn('foo');
$sut->action($stub->reveal());
// with phpspec
class MarkdownSpec extends ObjectBehavior
{
function it_converts_text_from_an_external_source(Reader $reader)
{
$reader->getMarkdown()->willReturn("Hi, there");
// $reader is now a Stub because we are controlling its behaviour.
$this->toHtmlFromReader($reader)->shouldReturn("Hi, there");
}
}
Mock
$mock = $this->prophesize(SomeClass::class);
$mock->doSomething('bar')->shouldBeCalled();
$sut->action($mock->reveal());
// with phpspec
class MarkdownSpec extends ObjectBehavior
{
function it_outputs_converted_text(Writer $writer)
{
$writer->writeText("Hi, there")->shouldBeCalled();
// Adding an assertion before the double is used makes it a Mock.
$this->outputHtml("Hi, there", $writer);
}
}
Spy
$spy = $this->prophesize(SomeClass::class);
$sut->action($spy->reveal());
$spy->doSomething('bar')->shouldHaveBeenCalled();
// with phpspec
class MarkdownSpec extends ObjectBehavior
{
function it_outputs_converted_text(Writer $writer)
{
$this->outputHtml("Hi, there", $writer);
// Adding an expectation after the double is used makes it a Spy.
$writer->writeText("Hi, there")->shouldHaveBeenCalled();
}
}