Обозначенные инициализаторы и опущенные элементы

Не пишите такие шаги и не вкладывайте шаги, вы просто попадете в беспорядок. Также данные предназначены для настройки состояния, а не для выполнения каких-либо действий.

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

  1. Разбейте шаг на более простые шаги
  2. Вытяните сложность из определений шагов и в вспомогательные методы

Наличие таких шагов, как «Когда я что-то щелкаю», является контрпродуктивным. Этот шаг все о том, КАК что-то сделано. Сценарии должны быть о том, что вы делаете, и почему это важно. Функции и сценарии предназначены не для программирования, а для описания поведения и должны быть очень простыми. Так что вы должны написать что-то вроде

Scenario: When I foo then the back button is disabled
  Given ...
  When I foo
  Then the back button should be disabled

, например, для моего банка будет

Scenario: Smile login disables back button
  Given I am logged into smile banking
  When I try and use the back button
  Then I should see the back button disabled warning

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

Given 'I am logged into smile banking' do
  # NOTE: both params are also helper methods
  login(site: smile_banking, user: create_user)
end

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

5
задан Jonathan Leffler 18 June 2014 в 14:16
поделиться

2 ответа

Попробуйте эту ссылку .

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

struct s {
   int a, b;
};

int main() {
  struct s = { .b = 42, .a = -42 };
  return 0;
}

Гибкость достигается за счет независимости от порядка при указании значений. Помните, что это было добавлено к стандарту C99 и может не поддерживаться компиляторами, которые не полностью поддерживают C99 (или не поддерживают более раннюю версию стандарта).

2
ответ дан 13 December 2019 в 19:35
поделиться

Если вы используете обычный список инициализаторов, значения для элементов назначаются по порядку, поэтому, если у вас есть эта структура :

typedef struct _foo {
  int a;
  int b;
} foo_t;

затем этот инициализатор явно назначает a , а не b :

foo_t value = { 7 };

без обозначенных инициализаторов, единственные элементы, которые могут быть пропущены, - это элементы, объявленные в конце

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

foo_t value = { .b = 8 };

, поэтому инициализатор для value.a опущен, несмотря на то, что он является первым значением в структуре.

9
ответ дан 13 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

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