Как проверить Behat Context?

Behat — очень хороший инструмент, BDD / TDD / DDD — ИМХО основа твердого кода, но …

Я часто вижу проекты, использующие Behat с довольно сложными классами Context, которые НЕ тестируются.

Например: Sylius / TaxonomyContext или же Sylius / ProductContext

/**
* @Given /^taxonomy "([^""]*)" has following taxons:$/
*/
public function taxonomyHasFollowingTaxons($taxonomyName, TableNode $taxonsTable)
{
$taxonomy = $this->findOneByName('taxonomy', $taxonomyName);
$manager = $this->getEntityManager();
$taxons = array();
foreach ($taxonsTable->getRows() as $node) {
$taxonList = explode('>', $node[0]);
$parent = null;
foreach ($taxonList as $taxonName) {
$taxonName = trim($taxonName);
if (!isset($taxons[$taxonName])) {
/* @var $taxon TaxonInterface */
$taxon = $this->getRepository('taxon')->createNew();
$taxon->setName($taxonName);
$taxons[$taxonName] = $taxon;
}
$taxon = $taxons[$taxonName];
if (null !== $parent) {
$parent->addChild($taxon);
} else {
$taxonomy->addTaxon($taxon);
}
$parent = $taxon;
}
}
$manager->persist($taxonomy);
$manager->flush();
}

Этот пример не является «ракетостроением», но в нем есть много мест, где он не может работать.
Исходя из моего опыта, контексты Behat могут быть довольно сложными.

Должен ли я также «доверять» моим контекстам и полагать, что они работают на 100% правильно?
Или есть какое-нибудь руководство / учебное пособие, как я могу проверить Behat Contexts?

Чем ты занимаешься? Как ты делаешь это?

3

Решение

Я бы сказал, что это зависит от того, как вы создадите свой набор тестов.

Поскольку Behat является основой для создания вашего собственного набора тестов, а поскольку это программное обеспечение, которое необходимо создать, следует учитывать лучшие практики разработки программного обеспечения. Одним из других является и концепция MVC. В Behat Контексты являются «контроллерами» и не должны содержать в них много логики. В идеале они должны вызывать требуемые методы в базовых сервисах, которые обеспечивают основную функциональность.

Конечно, для простых готовых шагов (например, предоставляемых расширениями Mink и т. Д.) Довольно легко создать некоторые тесты, в то время как для более сложной логики я бы порекомендовал создать сервис, который обрабатывает тяжелые логики, проверки и т. Д. Таким образом, вы может протестировать изолированный сервис со всех сторон, сохраняя при этом ваш контекст «контроллера» достаточно чистым и простым.

С другой стороны, если вы можете создать свой тест без участия большого количества скрытый логика (так как тесты должны быть максимально открытыми и чистыми), вам не нужно никакого обслуживания, и достаточно простых предложений. Затем, если вы действительно заботитесь об их качестве, вы можете создать несколько небольших тестов.

Для сложных случаев, как в приведенном примере, я бы попытался инкапсулировать некоторый код в service / manager и оставить простой контроллер без каких-либо тестов, обеспечивая при этом широкий охват тестов для базовых сервисов.

2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector