Руби: Способы предотвращения огуречного отравления? - PullRequest
1 голос
/ 05 октября 2011

Кто-нибудь знает, как бы я сделал это короче и менее избыточным:

Feature: nosql
  Scenario: flatfile

    Sometimes a user just wants to have flatfile storage like the
    classic Jekyll CMS.  When this is the case we should make sure
    that we adhere to classic folder and file structure, and store
    the generated content in _site unless the user decides that
    they want generation to be stored inside of memcached, then we
    should go ahead and use that.

    Given I have chosen flatfile storage for my site
    When I request a page, "the_page"
    And I have chosen flatfile generation
    Then I should pull the page from "_site"

    Given I have chosen flatfile storage for my site
    When I request a page, "the_page"
    And I have chosen memcached generation
    Then I should pull the page from memcached

Я просто вижу слишком много повторяющихся текстов, и хотя «Огурец» предназначен для того, чтобы помогать людям общаться, кажется, что он сделал вещи, возможно, «слишком глупыми» из-за всех повторений в определенных типах сценариев? Если я что-то упустил.

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

Редактировать: Также я знаю, что хранилище плоских файлов не является nosql, я просто бросил его туда, потому что я не решил, какой nosql, кроме Git, я хочу ... так что было проще просто выбросить flatfile, так что я могу начать понимать огурец для моих проектов.

Ответы [ 4 ]

4 голосов
/ 05 октября 2011

Вы можете использовать Background, например:

Feature: nosql
  Background:
    Sometimes a user just wants to have flatfile storage like the
    classic Jekyll CMS.  When this is the case we should make sure
    that we adhere to classic folder and file structure, and store
    the generated content in _site unless the user decides that
    they want generation to be stored inside of memcached, then we
    should go ahead and use that.

    Given I have chosen flatfile storage for my site
    When I request a page, "the_page"

  Scenario: flatfile
    When I have chosen flatfile generation
    Then I should pull the page from "_site"

  Scenario: memcached
    When I have chosen memcached generation
    Then I should pull the page from memcached
1 голос
/ 08 октября 2011

Изучив вашу функцию, я бы сказал, что 50% ее опускается ниже в стеке тестирования, чем огурец.Я написал бы тесты с точки зрения конечных пользователей, в том смысле, что если они выберут опцию на данной странице, они увидят, что эта страница вернется к ним так, как они ожидают.Как только ваша функция потерпит неудачу для этой опции, перейдите в низкоуровневую среду тестирования и напишите тесты для типа используемого вами механизма хранения.

С Cucumber я всегда стремлюсь к петле обратной связи запрос / ответчто пользователь будет ожидать от системы, будь то пользователь, другой сервер, мобильное устройство и т. д. Подумайте больше о тестировании в стиле черного ящика.

1 голос
/ 05 октября 2011

Background является опцией, см. это .

0 голосов
/ 05 октября 2011

В качестве альтернативы Background можно использовать Scenario Outline, хотя их легко использовать слишком много и это ухудшает читабельность - используйте свое лучшее решение:

Scenario Outline: Choosing generation strategy
    Given I have chosen flatfile storage for my site
    When I request a page, "the_page"
    And I have chosen <generation_type> generation
    Then I should pull the page from <storage_type>
Examples:
| generation_type | storage_type |
| flatfile        | "_site"      |
| memcached       | memcached    |

Другая часть вашего вопросанемного неясно.Огурец / Огурец не имеют понятия о зависимости между признаками, и на то есть веские основания.Я бы сказал, что memcached - это , а не функция, а скорее деталь реализации функции «отображения страниц для пользователя».

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

Сбой сценария с плоским файлом, если он соответствует хранилищу memcached, зависит от того, как вы реализуетеэти определения шагов.Шаг «Я выбрал создание плоского файла» должен настроить сайт на использование генерации плоского файла (а не memcached), и последний шаг должен завершиться неудачей, если страница была извлечена из неверного источника.

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