PHPUnit и поведение; дополнение или альтернатива?

Я искал SO и Google, но я не мог получить окончательного ответа.

PHPUnit — это фреймворк для модульного тестирования, такой как JUnit. Я использую его, в том числе в сочетании с Selenium-расширением для функционального тестирования. При просмотре я вижу, что Behat/Mink продолжает упоминаться. Но я не совсем понимаю, как сюда вписывается Бехат.

С Behat вы пишете сценарии в удобочитаемом формате. Затем Behat может перевести это в скелетные классы для нового проекта? Но предоставляет ли он также скелетные классы для модульного тестирования? Вы пишете юнит-тесты, используя Behat, или вы бы использовали для них PHPUnit/SimpleTest?

Но тогда Behat/Mink заменяет расширение PHPUnit_Selenium для функционального тестирования?

Вы используете Behat только для новых проектов или его можно адаптировать и к существующим проектам?


person qrazi    schedule 12.02.2013    source источник


Ответы (3)


Да, я бы рассматривал Behat как альтернативу phpUnit, как для общего тестирования кода, так и для функционального тестирования с использованием автоматизации браузера.

Для общего тестирования phpUnit является более зарекомендовавшим себя продуктом, в то время как Behat ориентирован на тесты, написанные с использованием методологии «BDD» (Behaviour Driven Design). В phpUnit также есть функции BDD, но Behat гораздо больше ориентирован на этот стиль.

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

Есть тонкие пограничные случаи, когда каждый из них имеет преимущества перед другим, но в большинстве случаев они оба способны запускать тестовые сценарии в различных браузерах.

Я бы предпочел Behat/Mink на том основании, что он более гибкий; он может поддерживать несколько механизмов автоматизации браузера, включая Selenium и Sahi, а это означает, что если у вас возникнет проблема с одним, вы можете переключить свои тесты на другой и продолжить. У нас была именно такая ситуация, когда мы пытались заставить некоторые тестовые сценарии Mink работать в Selenium; переключение на Sahi заставило его работать и потребовало изменения всего одной строки тестового кода.

Также стоит добавить, что Mink можно использовать сам по себе без Behat, если вы не хотите писать тесты в стиле BDD.

person SDC    schedule 12.02.2013
comment
Итак, для существующего приложения, которое было создано без учета BDD, вы бы использовали PHPUnit? А для свежего проекта, использующего BDD, предпочесть Behat? - person qrazi; 12.02.2013
comment
Предпочтение, которое я указал для Mink, в основном отвечало на вопрос о написании функциональных тестовых сценариев браузера из-за его гибкости. Я упомянул аспект BDD, но на самом деле не принял это во внимание при ответе. Лично я использую phpUnit для модульного тестирования и Mink/Sahi для функционального тестирования. (но мы рассматриваем возможность переноса наших функциональных тестов на Javascript, чтобы уменьшить количество уровней программного обеспечения между тестовым скриптом и браузером) - person SDC; 12.02.2013
comment
кажется, что все не так с этим ответом. phpunit — это модульное тестирование, и поэтому он придерживается TDD. phpspec и behat — это функциональное тестирование, поэтому это BDD. они дополняют. Тест TDD один или несколько классов. BDD протестируйте полную функцию в нескольких модулях вашего приложения. - person useless; 13.08.2013

Я бы назвал Behat дополняющим PHPunit. Я имею в виду дополнительное использование Behat для тестирования поведения, PHPUnit для тестирования кода. Используя BDD/TDD, нужно сначала написать тест, основанный на пользовательской истории. Чтобы пройти тест, вы обычно пишете несколько тестов PHPUnit, используя TDD, чтобы создать приложение, которое сможет пройти тест BDD.

BDD должен проверять поведение и не знать о коде приложения, таком как объекты/контроллеры/интерфейсы. Вы должны иметь возможность заменить полное приложение другим и по-прежнему проходить все тесты, когда поведение приложения остается прежним.

TDD, помимо других вещей, таких как ваш разум, должен управлять вашей структурой классов и взаимодействием между ними. Кроме того, они доказывают, что ваши методы делают то, что должны делать, проясняют намерения и позволяют без страха проводить рефакторинг.

person Jop van Raaij    schedule 10.08.2013
comment
В BDD нет ничего, что указывало бы на уровень. Вы можете тестировать поведение юнита. В этом смысле BDD может применяться для модульного тестирования. - person Greg Bell; 12.01.2017

кажется, что все не так с этим ответом.

phpunit — это модульное тестирование, и поэтому он придерживается TDD.

phpspec и behat — это функциональное тестирование, поэтому это BDD.

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

Тест TDD один или несколько классов. BDD протестируйте полную функцию в нескольких модулях вашего приложения.

person useless    schedule 13.08.2013
comment
Phpspec не предназначен для модульного тестирования. Как вы можете видеть на их веб-сайте, для BDD phpspec.net/en/stable/ руководство/introduction.html - person Eleftherios; 07.11.2019