Codeception\Stub
Library on top of PHPUnit's mock builder providing a highly simplified syntax:
Reference
- Stub - creating stub classes using static methods
- Stub Trait - creating stubs and mocks using trait
- Expected - defining expectations for mocks
Install
Enabled by default in Codeception. For PHPUnit install this package:
composer require codeception/stub --dev
Stubs
Stubs can be constructed with Codeception\Stub
static calls:
<?php
// create a stub with find method replaced
$userRepository = Stub::make(UserRepository::class, ['find' => new User]);
$userRepository->find(1); // => User
// create a dummy
$userRepository = Stub::makeEmpty(UserRepository::class);
// create a stub with all methods replaced except one
$user = Stub::makeEmptyExcept(User::class, 'validate');
$user->validate($data);
// create a stub by calling constructor and replacing a method
$user = Stub::construct(User::class, ['name' => 'davert'], ['save' => false]);
// create a stub by calling constructor with empty methods
$user = Stub::constructEmpty(User::class, ['name' => 'davert']);
// create a stub by calling constructor with empty methods
$user = Stub::constructEmptyExcept(User::class, 'getName', ['name' => 'davert']);
$user->getName(); // => davert
$user->setName('jane'); // => this method is empty
$user->getName(); // => davert
Alternatively, stubs can be created by using Codeception\Test\Feature\Stub
trait:
<?php
$this->make(UserRepositry::class);
$this->makeEmpty(UserRepositry::class);
$this->construct(UserRepositry::class);
$this->constructEmpty(UserRepositry::class);
// ...
Mocks
Mocks should be created by including Codeception\Test\Feature\Stub
trait into a test case.
Execution expectation are set with Codeception\Stub\Expected
:
<?php
// find should be never called
$userRepository = $this->make(UserRepository::class, [
'find' => Codeception\Stub\Expected::never()
]);
// find should be called once and return a new user
$userRepository = $this->make(UserRepository::class, [
'find' => Codeception\Stub\Expected::once(new User)
]);
License
MIT