Flexible Stub wrapper for PHPUnit's Mock Builder

2.0.1 2018-05-18 14:33 UTC


Build Status Latest Stable Version Total Downloads License

Library on top of PHPUnit's mock builder providing a highly simplified syntax:


  • Stub - creating stub classes using static methods
  • Stub Trait - creating stubs and mocks using trait
  • Expected - defining expectations for mocks


Enabled by default in Codeception. For PHPUnit install this package:

composer require codeception/stub --dev


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');

// 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 

See complete reference

Alternatively, stubs can be created by using Codeception\Test\Feature\Stub trait:

// ...


Mocks should be created by including Codeception\Test\Feature\Stub trait into a test case. Execution expectation are set with Codescption\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)