test-doubles-mocking
Installation
SKILL.md
Test Doubles Mocking (Symfony)
Use when
- A class under test depends on a collaborator that is slow, external or non-deterministic, such as a payment gateway or a message bus.
- An interaction must be verified, such as
persist()andflush()or a dispatched message. - A repository needs an in-memory fake implementing its interface.
- Choosing between a dummy, stub, mock, spy or fake.
Default workflow
- Pick the double by need: stub to feed values, mock to verify a call, fake for a working simplified implementation.
- Create it with
$this->createMock(Interface::class)and stub with->method('charge')->willReturn(...). - Verify only when the interaction matters:
expects($this->once())->with(...), or$this->callback()to inspect a dispatched message. - Script behavior with
willReturnOnConsecutiveCalls(),willThrowException()orwillReturnCallback(). - For repositories, write an
InMemoryfake implementing the interface. - Use
ProphecyTraitwithprophesize()andreveal()only if the project already relies on Prophecy.