Skip to content

Codeception/Stub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Codeception\Stub

CI Latest Stable Version Total Downloads License

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 

See complete reference

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