====== Behaviour-Driven Development pour Php ====== Le Behaviour-Driven Development ([/glossaire/BDD|BDD]]) est idéal pour les tests d'acceptation et la collaboration entre équipes techniques et métiers. Le BDD est bien adapté pour les [[/informatique/ai_lm/ai_coding|assistants IA]] : * https://docs.behat.org/en/latest/behat_and_ai.html **Behat**: Framework BDD le plus connu pour PHP, inspiré de [[https://cucumber.io|Cucumber]]. Permet de décrire le comportement de l'application en langage naturel (Gherkin). Intégration facile avec Symfony et Laravel. https://docs.behat.org, https://github.com/Behat/Behat **Codeception**: Framework de test PHP qui supporte le style BDD. provides high-level domain language for tests. Tests are represented as a set of user's actions. Symfony, Laravel, Zend Framework, Yii, Phalcon are supported. https://codeception.com Abandonnés: * [[https://github.com/danielstjules/pho|Pho]] last commit 2017-04 * [[https://github.com/olbrich/cuke4php|Cuke4php]] last commit 2013-12 ===== Behat ===== How does Behat know what to do when it sees ''Given there is a "Sith Lord Lightsaber", which costs £5''? You tell it: you write PHP code inside your context class (FeatureContext in our case) and tell Behat that this code represents a specific scenario step (via an attribute with a pattern): #[Given('there is a(n) :arg1, which costs £:arg2')] public function thereIsAWhichCostsPs($arg1, $arg2) { throw new PendingException(); } Those patterns could be quite powerful, but at the same time, writing them for all possible steps manually could become extremely tedious and boring. **That’s why Behat does it** for you : --- FeatureContext has missing steps. Define them with these snippets: #[Given('there is a :arg1, which costs £:arg2')] public function thereIsAWhichCostsPs($arg1, $arg2) { throw new PendingException(); }