Пытаюсь усовершенствовать свои сценарии с огурцом

Я знаю, что любой из них сработает, но я пытаюсь стать лучшим членом сообщества рубинов и огурцов. У меня есть история, которая проверяет, нет ли в нескольких разделах моего сайта ссылок, она не должна отображаться. Итак, какой из этих двух способов лучше всего писать сценарии. Еще раз, я понимаю, что любой из них будет работать, но я ищу решение Best Practice. Я обычно использую вариант B, поскольку все они тестируют разные шаги «Затем»; однако я провел некоторое исследование и сомневаюсь в себе, поскольку я могу протестировать все сценарии с одним и тем же заданным утверждением, и я читал, что вам следует создавать новый сценарий только в том случае, если вы меняете как «данный», так и «затем» шаги .

A.

Scenario: A user that cannot access A, B, C, or D
    Given I am a, user without access to A, B, C, or D
    When I navigate to reports
    Then I see the A header
    But I cannot click on A's header
    And I see error message under A stating the user does not have access
    And I do not see the B section
    And I do not see the C section
    And I do not see the D section

ИЛИ

B.

Scenario: A user that cannot access A
    Given I am a, user without access to A
    When I navigate to reports
    Then I see the A header
    And I see error message under A stating the user does not have access
    But I cannot click on A's header

Scenario: A user that cannot access B
    Given I am a, user without access to B
    When I navigate to reports
    Then I do not see the B section

Scenario: A user that cannot access C
    Given I am a, user without access to C
    When I navigate to reports
    Then I do not see the C section

Scenario: A user that cannot access D
    Given I am a, user without access to D
    When I navigate to reports
    Then I do not see the D section

person Matt Westlake    schedule 07.03.2013    source источник


Ответы (3)


Я считаю, что лучше всего разбивать функции на различные части (в данном случае сценарии).

Вариант B лучше, потому что он придерживается принципа единой ответственности (который, конечно, может быть применен ко многим различным частям кода). B написано ясно и прямо. Если вы вернетесь к этому через 6 месяцев или новый разработчик увидит это впервые, вы оба хорошо представляете себе цель теста.

Вариант А, похоже, делает многое, и хотя это интеграционный тест, вам следует сохранять как можно более независимые отдельные части тестируемого кода. Спросите себя: если этот тест не удался, знаете ли вы, почему? или вам придется начать копаться, чтобы увидеть, какая часть теста на самом деле не прошла?

Лучшая практика в этом контексте отстаивает меньшие участки кода. Если эти тесты начнут повторяться (СУХИЕ, не повторяйтесь), вы можете начать их рефакторинг (возможно, с Background)

person AdamT    schedule 07.03.2013
comment
Мне не нравится использовать фоны, потому что в этом случае не вся специфика того, что делает сценарий, задокументирована внутри блока сценария. Хотя это уменьшает объем кода в функции, и вы в конечном итоге будете повторяться, когда сценарий терпит неудачу, у вас есть вся информация внутри сценария для воссоздания отказа. В противном случае вам придется копаться в поисках справочной информации или, что еще хуже, до перехвата. - person Matt Westlake; 08.03.2013
comment
Я использую только фон и сушку как возможный следующий шаг, если кто-то начинает повторяться. Суть сухой не в том, чтобы сократить код, а в том, чтобы унифицировать код и сделать его цель более ясной. Каждый тест должен четко указывать на его цель. То, что повторяется, но не выделяется, не должно отвлекать или отвлекать внимание от функции / кода, которые находятся в центре нашего теста. - person AdamT; 08.03.2013

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

Набросок сценария может сделать ваш тест как подробным, так и кратким. В следующем примере с первого взгляда очевидно, что ресурсы B, C и D имеют одинаковую политику, а ресурс A - другой:

Scenario Outline: A user cannot access an unauthorized resource
    Given I am a user without access to <resource>
    When I navigate to reports
    Then I do not see the <resource> section

    Examples:
        | resource |
        | B        |
        | C        |
        | D        |


Scenario: A user that cannot access A
    Given I am a, user without access to A
    When I navigate to reports
    Then I see the A header
    And I see error message under A stating the user does not have access
    But I cannot click on A's header
person joshuanapoli    schedule 09.03.2013

Я бы заменил A B C или D чем-то более читаемым, просто подумайте, что ваша бабушка должна понимать это определение, она не поймет, что означают A B C D. так давай скажем так

для базового пользователя .. .. тогда пользователь не может видеть инструменты редактирования

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

Просто попробуйте присоединиться к этим A B C D во что-то значимое, например, название группы, уровень n, команду и т. Д.

тогда вы будете использовать TestUnits для каждого из элементов: A B C D, если вы

person Snake Sanders    schedule 07.03.2013
comment
Я, очевидно, использую A B C D в качестве заполнителей для реальных предметов, но это для корпорации, и я не уверен, как они отнесутся к тому, что я размещу особенности их веб-сайта на форуме до того, как он будет выпущен. - person Matt Westlake; 08.03.2013
comment
я имел в виду сгруппировать их под одним именем. Или используйте таблицу ruby-doc.org/gems/docs/d/davidtrogers-cucumber-0.6.2/Cucumber/ - person Snake Sanders; 08.03.2013