Nano Hash - криптовалюты, майнинг, программирование

Specflow - правильный способ проверки данных сетки

Итак, в моем приложении у меня есть сетка со списком всех пользователей, зарегистрированных на сайте. Теперь я хотел бы протестировать его с помощью specflow и WatiN.

Я придумал следующий сценарий:

Scenario: List of users
    Given I am logged in as "Admin" user
    And There exists following users
        | Username | First name | Last Name | Registration date |
        | alice    | Alice      | LAlice    | 2013-10-28        |
        | bob      | Bob        | LBob      | 2013-10-27        |
    When I go to all users page
    Then There should be following users in table
        | Username | First name | Last Name | Registration date |
        | alice    | Alice      | LAlice    | 2013-10-28        |
        | bob      | Bob        | LBob      | 2013-10-27        |

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


Ответы:


1

Чтобы убедиться, что я правильно понимаю проблему, вы обеспокоены тем, что вы повторили определение таблицы в шагах «Дано» и «Тогда» одного сценария (т. е. вы не запускаете 100 похожих сценариев, для всех которых требуется одна и та же настройка таблицы).

Вроде то, что у вас есть, в порядке.

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

Given I am logged in as "Admin" user
And There exists following users
    | Username | First name | Last Name | Registration date |
    | alice    | Alice      | Wonderland| 2013-10-28        |
    | bob      | Bobby      | Tables    | 2013-10-27        |
When I go to all users page
Then There should be following users in table
    | Username | Full Name        | Registration date |
    | alice    | Alice Wonderland | 2013-10-28        |
    | bob      | Bobby Tables     | 2013-10-27        |

Этот сценарий ясен, и вы не можете сэкономить место здесь.

Точно повторяя таблицу, как вы это сделали, вы даете понять в своей тестовой/живой документации, что то, что вы видите на странице, должно точно соответствовать представлению данных в памяти. Это стоит выразить в тесте.

Другие варианты, которые могут сэкономить место:

Given I am logged in as "Admin" user
And there exists the following users
    | Username | First name | Last Name | Registration date |
    | alice    | Alice      | LAlice    | 2013-10-28        |
    | bob      | Bob        | LBob      | 2013-10-27        |
When I go to all users page
Then I should be able to see all the users

Это не очень понятно и требует настройки шага Then либо для обмена данными с шагом Given, либо для фактического запроса самого контекста фиктивных данных (очень плохой план, потому что тест может пройти по неправильной причине).

Если вы спрашиваете, есть ли что-нибудь в ключевом слове C++ #define строки для настройки многократно используемой многострочной строки const - насколько мне известно, нет, и если бы было, вы не должны использовать его по причинам ясности выше.

В заключение - мне нравится ваш тест именно таким, какой он есть. :)

---- редактировать ---- Запоздалая мысль:

Тесты должны провалиться ровно по одной причине. Возможно, ваш тест проверяет, «данные таблицы точно верны».

Но иногда хочется просто протестировать что-то попроще. Например.

Then user 'alice' should appear in the users table
28.10.2013

2

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

Что вы можете сделать, так это переписать тест, чтобы использовать Scenario Outline Specflow. характерная черта. Затем, если бы вы переписали свой сценарий следующим образом, вам нужно было бы определить пользовательские данные только один раз:

Scenario Outline: List of users
 Given I am logged in as "Admin" user
 And There exists <Username> with <First name> <Last Name> and <Registration date>
 When I go to all users page
 Then There should be <Username> with <First name> <Last Name> and <Registration date>

   examples:
    | Username | First name | Last Name | Registration date |
    | alice    | Alice      | LAlice    | 2013-10-28        |
    | bob      | Bob        | LBob      | 2013-10-27        |
29.10.2013
  • +1 Это очень полезный альтернативный взгляд на этот тест. Однако, как вы говорите, это полезно для тестирования немного другого аспекта: то есть могу ли я отображать на своей странице каждую из следующих строк данных - очень хорошо, если вас беспокоят такие вещи, как форматирование Unicode или внедрение html/javascript. Если тест будет проверять такие вещи, как целостность всего набора данных или автоматическая сортировка и т. д., то это не так уместно. 30.10.2013
  • @perfectionist да, вы правы и рады, что оценили ответ. Мой ответ показывает вам, как удалить дублирование данных из ваших файлов функций, но, как вы говорите, вы теряете возможность убедиться, что все записи присутствуют на экране в то же время. 30.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..