Как использовать интерфейсы классов при использовании PHPSpec

При тестировании с PHPSpec, как я могу использовать интерфейсы классов, введенные в мои методы, а не конкретный класс?

Например, у меня есть Product класс, который вводит VariationInterface в метод:

/**
* ...
*/
public function addVarient(VarientInterface $varient)
{
return $this->varients->add($varient);
}

Хотя, поскольку PHPSpec не имеет контейнера IOC для привязки VarientInterface в Varient Я действительно не могу проверить свои занятия.

Разве это не лучшая практика, чтобы кодировать интерфейс, а не конкретный класс?

1

Решение

Вы можете макетировать конкретные классы и интерфейсы в PHPSpec.

Пожалуйста, проверьте этот пример:

<?php

//file spec/YourNameSpace/ProductSpec.php

namespace spec\YourNameSpace\Product;

use YourNameSpace\VarientInterface;
use PhpSpec\ObjectBehavior;

class ProductSpec extends ObjectBehavior
{
function it_is_varients_container(VarientInterface $varient)
{
$this->addVarient($varient);

$this->getVarients()->shouldBe([$varient]);
}
}

Вы просто передаете VarientInterface в качестве параметра для метода тестирования.
Этот VarientInterface смоделирован PhpSpec (на самом деле, Пророчеством).

Пожалуйста, проверьте официальную документацию phpspec о насмешках http://www.phpspec.net/docs/introduction.html#prophet-objects

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]