codeception / stub
Flexible Stub wrapper for PHPUnit's Mock Builder
4.3.0
2026-02-06 15:19 UTC
Requires
- php: ^8.1
- phpunit/phpunit: ^8.4 | ^9.0 | ^10.0 | ^11 | ^12 | ^13
Requires (Dev)
- consolidation/robo: ^4.0
Suggests
None
Provides
None
Conflicts
- codeception/codeception: <5.0.6
Replaces
None
README
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:
// 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:
$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:
// 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