Я только начал использовать Phpspec в моем проекте Laravel.
Класс, который я тестирую, имеет следующую схему:
class Card
{
/**
* @var int
*/
private $rank;
/**
* @var int
*/
private $suit;
/**
* @param int $rank
* @param int $suit
*/
public function __construct($rank = null, $suit = null);
/**
* @return int
*/
public function getRank();
/**
* @return int
*/
public function getSuit();
/**
* @param int $rank
*/
private function setRank($rank);
/**
* @param int $suit
*/
private function setSuit($suit);
}
Я не включал фактический код, поскольку он довольно упрощен. Он выдает исключения в случае, если параметры недействительны, но дайте мне знать, если вы хотите, чтобы я обновил это с помощью кода. И здесь класс spec:
class CardSpec extends ObjectBehavior
{
const INVALID_PARAM = 'WontWork';
const INVALID_RANK = 14;
const INVALID_SUIT = 5;
const VALID_RANK = 12;
const VALID_SUIT = 2;
function it_is_initializable()
{
$this->shouldHaveType('Shazzam\Games\Blackjack\Card');
}
function it_throws_exception_on_invalid_arguments()
{
$this->shouldThrow('\InvalidArgumentException')->during('__construct', [self::INVALID_PARAM, 0]);
$this->shouldThrow('\InvalidArgumentException')->during('__construct', [self::INVALID_RANK, self::VALID_SUIT]);
$this->shouldThrow('\InvalidArgumentException')->during('__construct', [self::VALID_RANK, self::INVALID_SUIT]);
}
function it_creates_an_object_successfully()
{
// Would like to pass parameters and check its values using the get methods
}
}
Я смог проверить, что это исключение для недопустимых аргументов, но теперь я хочу убедиться, что он передает проверку конструкции и возвращает значения, когда они действительны.
Я прочитал документацию и не смог найти способ добиться этого, что заставляет меня думать, что я не совсем понимаю BDD.
Является ли этот тип испытаний единичным тестом и поэтому должен быть отделен от тестов поведения?
После некоторого чтения я столкнулся с этой хорошей записью:
Проверьте ответы austenc и ozanhazer, если у вас есть те же сомнения.
Как и в этом сообщении, phpspec не предназначен для функциональных и приемочных испытаний.
Проверьте, что почта или Google соответствуют подходящим инструментам с тестами, которые вы хотите реализовать.