2016-11-05 9 views
1

я имел ряд сценариев, которые выглядят следующим образом:Specflow - Сценарий outilne с таблицей данных

Given these receipts: 
| Amount | Date  | Company   | 
| 1000 | 2016/10/25 | One Company  | 
| 1200 | 2016/10/20 | Another Company | 
| 1500 | 2016/10/13 | My Company  | 
And delay is 15 
When I calculate date of payment 
Then Date of payment should be 20 

Given these receipts: 
| Amount | Date  | Company   | 
| 1000 | 2016/10/25 | One Company  | 
| 1200 | 2016/10/20 | Another Company | 
| 1500 | 2016/10/13 | My Company  | 
And delay is 30 
When I calculate date of payment 
Then Date of payment should be 15 

Given these receipts: 
| Amount | Date  | Company   | 
| 1000 | 2016/10/25 | One Company  | 
| 1200 | 2016/10/20 | Another Company | 
| 1500 | 2016/10/13 | My Company  | 
And delay is 45 
When I calculate date of payment 
Then Date of payment should be 10 

Так я узнал о Scenario outline, и я пытался сделать один для вышеуказанных сценариев, но были проблемы положить в квитанции по понятным причинам:

Given these receipts: '<receipts>' 
And delay is <delay> 
When I calculate date of payment 
Then Date of payment should be '<dateOfPayment>' 

Examples: 
| delay | dateOfPayment | receipts        | 
| 15 | 20   | | Amount | Date  | Company  | | 
         | | 1000 | 2016/10/25 | one company | | 
         | | .............................. | | 

Given, что я хочу ту же коллекцию, в этом случае, receipts для всех scenarios в моем Feature как я могу объявить таблицу, который будет передан по адресу '<receipts>' в scenario outline

Возможно, должен ли я действовать по-другому?

---------------------------------- EDITED ----------- ---------------------

может быть что-то подобное может работать (но это не реализовано в Gherkin):

Given these receipts: '<receipts>' 
And delay is <delay> 
When I calculate date of payment 
Then Date of payment should be '<dateOfPayment>' 

Examples: 
| delay | dateOfPayment | 
| 15 | 20   | 

Placeholder: '<receipts>' 
| Amount | Date  | Company   | 
| 1000 | 2016/10/25 | One Company  | 
| 1200 | 2016/10/20 | Another Company | 
| 1500 | 2016/10/13 | My Company  | 
+0

Если данные данных «квитанций» являются постоянными в разных сценариях, вы должны хранить их там, где у вас есть в исходных сценариях. И просто поставьте «delay» и «dateOfPayment» в примерах схемы сценария. Но если данные квитанций изменяются в разных сценариях, это не сработает.Какова зависимость трех компаний в данных? – Grasshopper

+0

Компания - это только информация в этом примере, это может быть другая дата (дата выпуска, срок исполнения). – sabotero

+0

@ Grasshopper, так что я должен повторить таблицу для каждого сценария? Похоже, что это может быть факторизовано каким-то образом, возможно, создание другого сценария с только заданным, передающим таблицу в качестве параметра. Возможно, что-то вроде [this] (http://www.specflow.org/documentation/FeatureContext/) (без использования feturecontext, упомянутого в этой ссылке)? – sabotero

ответ

2

Я имел эту глупую идею: Учитывая, что выручка не меняется, я мог бы, возможно, обеспечить к Scenario Outline заданной с фактической table, а не placeholder

И это сработало:

Scenario Outline: payment 
Given these receipts: 
| Amount | Date  | Company   | 
| 1000 | 2016/10/25 | One Company  | 
| 1200 | 2016/10/20 | Another Company | 
| 1500 | 2016/10/13 | My Company  | 
And delay is '<delay>' 
When I calculate date of payment 
Then Date of payment should be '<dateOfPayment>' 

Examples: 
| delay | dateOfPayment | 
| 15 | 20   | 
| 30 | 10   | 
| 45 | 5    | 

Если вы, как я утра, работая в .Net с Specflow и c# specflow будет генерировать этот метод для Given с table:

[Given(@"these receipts:")] 
public void GivenTheseReceipts() 
{    
    ScenarioContext.Current.Pending(); 
} 

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

[Given(@"these receipts:")] 
public void GivenTheseReceipts(Table table) 
{ 
    var receipts = table.CreateSet<Receipt>(); // you can even create a set given you have defined the Receipt class 
} 

public class Receipt 
{ 
    public decimal Amount { get; set; } 
    public DateTime Date { get; set; } 
    public string Company { get; set; } 
} 

------------------------- EDITED ------------ -------------------------

Кажется, он бы работал с Background:

Background: 
Given these receipts: 
| Amount | Date  | Company   | 
| 1000 | 2016/10/25 | One Company  | 
| 1200 | 2016/10/20 | Another Company | 
| 1500 | 2016/10/13 | My Company  | 

Scenario Outline: payment 
And delay is '<delay>' 
When I calculate date of payment 
Then Date of payment should be '<dateOfPayment>' 

Examples: 
| delay | dateOfPayment | 
| 15 | 20   | 
| 30 | 10   | 
| 45 | 5    | 

Теперь это только вопрос стиля.

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

+0

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

1

Scenario Outline делает не поддерживает замену таблицы.

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

| delay | dateOfPayment | rcpt1Amnt | rcpt1Date | rcpt1Cmpny | rcpt2Amnt | recpt2Date | ... | 15 | 20 | 1000 | 2016/10/25| One Company| 1200 | 2016/10/20 | ...

+0

Это может быть решение, но оно повторяет таблицу в каждом «примере», и это то, чего я хочу избежать. – sabotero

+0

Пожалуйста, проверьте мой ответ ниже. Из любопытства он работает с Cucumber-jvm? С помощью Specflow он будет хорошо! – sabotero

+0

Я неправильно читаю ваш оригинальный вопрос @sabotero - ваше решение - правильный путь. –

 Смежные вопросы

  • Нет связанных вопросов^_^