Так заглушкой что Codeception использует для фиктивных объектов. Короче говоря, насмешка - это создание объектов, которые имитируют поведение реальных объектов.
Вот пример:
class UpdateBalance
{
public $balanceRepository;
public function __construct(BalanceRepositoryInterface $balanceRepository)
{
$this->balanceRepository = $balanceRepository;
}
public function subtract($amount, $id)
{
$updatedAmount = $this->balanceRepository->subtract($amount, $id);
if ($updatedAmount < 0) {
throw NegativeBalanceException($updatedAmount, $id);
}
return $updatedAmount;
}
}
class UpateBalanceTest extends PHPUnit_Framework_TestCase
{
public function testSubtractThrowsNegativeBalanceException()
{
$balanceRepository = Stub::make(
'BalanceRepositoryInterface'
array(
'subtract' => Stub::atLeastOnce(function() { return -100 })
)
);
$updateBalance = new UpdateBalance($balanceRepository);
$this->expectException(NegativeBalanceException::class);
$updateBalance->subtract(100, 1);
}
}
Обратите внимание, что мы не имеем класс BalanceRepsository. Мы использовали заглушки Codeception и делали вид, что класс BalanceRepository существует. Притворив, что он существует, мы можем протестировать функциональность функции UpdateBalance :: subtract, проверив, что выбрано исключение NegativeBalanceException.
Светильники, с другой стороны, предназначены для обмена тестовыми данными на всех ваших тестах. Если мы используем UpdateBalance :: вычитать пример() еще раз, мы могли бы подчеркнуть, проверить поле суммы обеспечения он выдает правильное исключение в зависимости от количества пропускает через:
// In some bootstrap or setup function
Fixtures::add('zero-amount', 0);
Fixtures::add('negative-amount', -1);
Fixtures::add('string-negative-amount', '-1');
class UpdateBalance
{
// ...
public function subtract($amount, $id)
{
if ($amount < 0) {
throw new
}
// ...
}
}
class UpateBalanceTest extends PHPUnit_Framework_TestCase
{
// ...
public function testSubtractThrowsCantSubtractNegativeAmountException()
{
$balanceRepository = Stub::make(
'BalanceRepositoryInterface'
);
$updateBalance = new UpdateBalance($balanceRepository);
$this->expectException(CantSubtractNegativeAmountException::class);
$updateBalance->subtract(Fixture::get('negative-amount'), 1);
}
}
Теперь мы можем использовать наши предопределенные светильники во всех наших тестах. Я хотел бы отметить, что использование приборов в приведенном выше примере, вероятно, будет чрезмерным, но для более сложных тестовых данных, таких как проверка шестнадцатеричных значений, это будет намного полезнее.
Большое спасибо за ваш ответ. Если я правильно понимаю, вы используете fixtur в кодексе, таком как фиксированная (статическая) переменная. И заглушка для имитации объекта. Я думаю, что это сбивает с толку, потому что вы часто читаете, что заглушки - это светильники. – astridx
Я думаю, что это хорошее резюме да! – thomasstuttard