2015-08-08 3 views
3

Behat является очень хорошим инструментом, BDD/TDD/DDD ИМХО основа SOLID кодирования, но ...Как протестировать контекст Behat?

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

Например: 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?

Что вы будете делать? Как ты делаешь это?

+0

Возможно, это соответствует http://programmers.stackexchange.com/ better. Проверьте это: http://meta.stackexchange.com/a/68386/220423 – aemxdp

+0

@aemxdp при обращении к другим сайтам часто полезно указать, что [перекрестная публикация не одобрена] (http: //meta.stackexchange. COM/теги/кросс-постинг/данные). См. Также: ** [Что происходит с Programmers.SE? Руководство по переполнению стека] (http://meta.programmers.stackexchange.com/q/7182/31260) ** – gnat

+0

@gnat, кричит, я новичок в этом, спасибо. – aemxdp

ответ

2

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

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

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

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

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

+0

Спасибо за советы. (Small Off Topic) Недавно я узнал, что большинство людей используют Behat/Cucumber в «неправильном» способе - для тестирования GUI. Как объяснено здесь (http://everzet.com/post/99045129766/introducing-modelling-by-example) Я также использовал его в основном для тестирования графического интерфейса, и теперь я знаю, почему это не очень хорошая идея - Я перестану это делать - просто используйте его для DDD. – paq85

Смежные вопросы