BDD, лучшие практики огурца

Я пытаюсь понять некоторые лучшие практики, когда дело доходит до BDD и Cucumber. Я только недавно начал использовать его, и первая функция, на которую я написал тест, - это тестирование функции поиска, а именно, как слой Repository интегрируется с JPA EntityManager, который был введен с помощью @PersistenceContext. Это делает создавая EJBC-контенер, используя встроенную зависимость от браузера GlassFish и инициализируя этот уровень. Это работает, поэтому я довольно доволен этим.

Теперь я нахожусь на том этапе, когда хочу начать использовать Selenium с Cucumber, чтобы проверить функцию поиска на странице JSF. Который Я предполагаю, что после проверки поиска я смогу проверить содержимое таблицы HTML.

Можно ли использовать один и тот же файл с другим классом шагов, который выполняет тестирование Selenium? Это хорошая практика? На данный момент ни один из этих материалов Cucumber не чувствует себя модульным тестированием, все это похоже на тестирование интеграции!

Что я имею в виду, это что-то вроде следующей организации

test
    |
    java
    |   |
    |   feature
    |       |
    |       web
    |       |  |
    |       |  user
    |       |      UserSearchWebSteps
    |       |      UserAddWebSteps
    |       |      UserDeleteWebSteps
    |       |      UserWebTest
    |       db
    |          |
    |          user
    |              UserSearchDBSteps
    |              UserAddDBSteps
    |              UserDeleteDBSteps
    |              UserDBTest
    resources
        |
        feature
            |
            user
                search_users.feature
                add_user.feature
                delete_user.feature

Таким образом, шаги будут организованы на уровне web или db, а затем в этом примере каждый пользовательский шаг находится под этим. С соответствующий тестовый класс runner, который выполняет все эти шаги

И поскольку оба уровня сети и db ожидают тех же результатов, у меня были бы общие файлы функций.

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

@RunWith(Cucumber.class)
@CucumberOptions(features =
{
    "src/test/resources/feature/user"
})
public class UserDBTest
{

}
4 голоса | спросил PDStat 3 J000000Friday15 2015, 09:33:02

1 ответ


4

Традиционно в BDD мы начинаем с внешней стороны и перемещаемся, поэтому у нас будет веб-страница, а затем переходим к фактическим соединениям БД, пока сценарий не будет работать с веб-страницей.

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

Я не думаю, что на данный момент это огурец. Behat для PHP. Константин Кудряшов на как смоделировать домен, используя те же самые сквозные сценарии , которые работают через веб-слой, могут дать вам некоторые идеи о том, как это сделать хорошо (короткая версия: не забудьте сделать ваши сценарии декларативными!)

Если вы хотите сделать это в Cucumber, я думаю, что было бы возможно, если бы вы использовали символические ссылки для зеркального отображения файлов функций, которые вы хотели запустить в обоих местах? Тебе понадобится какое-то придирье, чтобы заставить его работать. Но ... теория очень проста, и Константин, который является уважаемым членом сообщества BDD, некоторое время изучает это пространство.

Даже на более низких уровнях, однако, это был бы не единичный тест, а тест интеграции.

Можно использовать BDD на уровне единицы ( он начал там, в конце концов, ), но вы, вероятно, захотите использовать что-то вроде RSpec, а не более тяжелые системы на уровне системы.

ответил Lunivore 16 J000000Thursday15 2015, 12:39:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132