Stubben

Mit dem Stubben kann der Rückgabewert einer Methode vorgegeben werden.Eine gestubbte Methode hat keine Invokation Rule (wie gemockte Methoden). Wird eine gestubbte Methode nicht aufgerufen, wird folglich keine Exception geworfen.

<?php
$mock = Mokka::mock(SampleClass::class);

// getFoo() should return 'baz' when called with the argument 'bar'
Mokka::when($mock)->getFoo('bar')->thenReturn('baz');

echo $mock->getFoo(): // => NULL
echo $mock->getFoo('bar'); // => 'baz'

Hier kann auch das in Mocken eingeführte AnythingArgument verwendert werden:

<?php
// getFoo() should always return 'baz'
Mokka::when($mock)->getFoo(Mokka::anything())->thenReturn('baz');

echo $mock->getFoo('foo'): // => 'baz'
echo $mock->getFoo('bar'); // => 'baz'

Stubs und Mocks kombinieren

Mocks und Stubs können kombiniert werden, um einen Rückgabewert zu setzen und zusätzlich sicherzustellen, dass die Methode aufgerufen wird:

<?php
$mock = Mokka::mock(SampleClass::class);

// getFoo() should return 'baz' when called with the argument 'bar'
Mokka::when($mock)->getFoo('bar')->thenReturn('baz');
// also make sure that getFoo() gets called once
Mokka::verify($mock)->getFoo('bar');

echo $mock->getFoo('bar'); // => 'baz'

Exceptions werfen

Eine gestubbte Methode kann eine Exception werfen, anstatt einen Wert zurückzugeben:

<?php
$mock = Mokka::mock(SampleClass::class);
Mokka::when($mock)->getFoo()->thenThrow(new \InvalidArgumentException());

$mock->getBar(); // => throws exception