step argument transformations specflow tables
Водич за трансформације корака у табелама и табеле спекфлова:
Наш претходни туториал Спецфлов-а нас је о свему упознао Дељени и обимни везиви, куке и поновна употреба корака детаљно. Овде ћемо у овом упутству истражити више о трансформисању корачних аргумената у Спецфлов-у.
Слободно прочитајте наш Комплетан водич за обуку спецфлов-а за почетнике за јасно разумевање концепта. Корак Аргумент Трансформација карактеристика Спецфлов-а омогућава кориснику да обезбеди прилагођену трансформацију за параметре дане у Корацима.
Омогућава додавање прилагођене логике за претварање улазних параметара у одређени параметар. На пример, можете директно створити објект класе од параметара и вратити конструисани објекат из функције трансформације.
Још једна карактеристика Спецфлов-а коју ћемо погледати су Спецфлов Табеле које омогућавају прослеђивање улазних података у табеларном облику у једном кораку, а помоћници Табеле могу их директно мапирати у инстанцу Објецт по жељи.
Погледајте ВИДЕО:
Ево видео упутства о табелама Трансформације корака и табеле спецфлова:
Шта ћете научити:
Степ Аргумент Трансформације
Да бисмо на бољи начин разумели трансформације аргумената, покушајмо прво да схватимо како се тачно Спецфлов подудара са параметрима. Као што смо видели у нашим претходним чланцима, за пример претраге ИоуТубе-а, прослеђивали смо термин за претрагу као параметар за извршавање сценарија.
Подударање параметара обично се догађа путем регуларног израза, а подударање регуларног израза резултира подешавањем параметра методе на понуђени термин за претрагу у кораку.
Покушајмо прво да схватимо које су подразумевано подржане конверзије у Спецфлов-у и када трансформације аргумената могу бити корисне.
Подржане конверзије
Спецфлов подржава пуно конверзија из оквира, гледајући сам тип података након подударања регуларног израза. Може аутоматски да брине о конверзијама попут - Стринг, интегер, ГУИД, Енумс итд.
Да видимо пример за неке од ових у наставку:
Scenario: Get Transactions in my account Given I have entered customer name as Test Customer And I have entered customer account id as 0f8fad5b-d9cb-469f-a165-70867728950e And I select sorting order as DESCENDING And I select number of transactions to be displayed as 25 Then I should see my account transactions
У горњем узорку кода истакли смо различите типове уноса које преносимо у Корацима, а у имплементацијама корака они се претварају у одговарајуће типове података.
Погледајмо примене корака за ове у наставку (ради једноставности управо смо направили конзолу за сваки од корака како бисмо илустровали да се наведени аргумент аутоматски конвертује у очекивани тип):
(Given(@'I have entered customer name as (.*)')) public void GivenIHaveEnteredCustomerNameAsTestCustomer(String customerName) { Console.Out.WriteLine(customerName); } (Given(@'I have entered customer account id as (.*)')) public void GivenIHaveEnteredCustomerAccountIdAs(Guid accountId) { Console.Out.WriteLine(accountId.ToString()); } (Given(@'I select sorting order as (.*)')) public void GivenISelectSortingOrderAsAscending(SortOrder sortOrder) { Console.Out.WriteLine(sortOrder.ToString()); } (Then(@'I should see my account transactions')) public void ThenIShouldSeeMyAccountTransactions() { Console.Out.WriteLine('success!'); } (Given(@'I select number of transactions to be displayed as (.*)')) public void GivenISelectNumberOfTransactionsToBeDisplayedAs(int p0) { Console.Out.WriteLine(p0.ToString());
При извршавању горњег сценарија, излаз исписује све вредности успешно показујући да је аутоматско претварање аргумената у очекиване типове података било успешно.
Овако изгледа излаз:
Given I have entered customer name as Test Customer Test Customer -> done: SupportedSpecflowConversions.GivenIHaveEnteredCustomerNameAsTestCustomer('Test Customer') (0.0s) And I have entered customer account id as 0f8fad5b-d9cb-469f-a165-70867728950e 0f8fad5b-d9cb-469f-a165-70867728950e -> done: SupportedSpecflowConversions.GivenIHaveEnteredCustomerAccountIdAs(0f8fad5b-d9cb-469...) (0.0s) And I select sorting order as DESCENDING DESCENDING -> done: SupportedSpecflowConversions.GivenISelectSortingOrderAsAscending(DESCENDING) (0.0s) And I select number of transactions to be displayed as 25 25 -> done: SupportedSpecflowConversions.GivenISelectNumberOfTransactionsToBeDisplayedAs(25) (0.0s) Then I should see my account transactions success! -> done: SupportedSpecflowConversions.ThenIShouldSeeMyAccountTransactions() (0.0s)
Аргумент Трансформације
Погледајмо пример на делу да бисмо ово разумели. Подршка, имате апликацију која претвара дато време и претвара га у минуте. Пример: Ако је кориснички унос 1 дан - излаз је - 1440, ако је унос корисника 1 дан 2 сата 2 минута, онда би излаз требао бити 1562.
Сада се може видети да ће за подршку различитим врстама улаза требати написати различите имплементације везивања у зависности од врсте улаза. На пример: За улазе који имају само део дана, постојаће засебна имплементација корака, за улазе који имају дан, месец - биће одвојена примена корака итд.
Погледајмо како се ово може применити кроз имплементацију у једном кораку кроз трансформацију корачног аргумента, а обезбеђени улаз се једноставно претвара у објекат временске ознаке и враћа у првобитни корак који се назива трансформација корака.
Замислите то као скенирање регуларног израза првог нивоа на ваш улаз које делимично трансформисану вредност враћа у позивни корак.
Погледајте датотеку карактеристика која има 3 различите варијанте уноса, са једном трансформацијом претварањем у комплетан објекат временског распона и враћањем назад.
Scenario: Convert timestamp to minutes - variant 1 Given I have entered 50 days into the timestamp to minute converter When I press calculate Then the result should be 72000.00 on the screen Scenario: Convert timestamp to minutes - variant 2 Given I have entered 1 day, 2 hours, 3 minutes into the timestamp to minute converter When I press calculate Then the result should be 1563.00 on the screen Scenario: Convert timestamp to minutes - variant 3 Given I have entered 1 day, 1 hour, 1 minute, 30 seconds into the timestamp to minute converter When I press calculate Then the result should be 1501.50 on the screen
Погледајте истакнуте вредности у горњем примеру кода. Све ово ће се побринути за потпуно исту трансформацију, а крајњи резултат ће бити трансформисана вредност временског распона која се шаље натраг позивајућем кораку протока.
Погледајмо примену Трансформације у наставку:
(StepArgumentTransformation(@'(?:(d*) day(?:s)?(?:, )?)?(?:(d*) hour(?:s)?(?:, )?)?(?:(d*) minute(?:s)?(?:, )?)?(?:(d*) second(?:s)?(?:, )?)?')) public TimeSpan convertToTimeSpan(String days, String hours, String minutes, String seconds) { int daysValue; int hoursValue; int minutesValue; int secondsValue; int.TryParse(days, out daysValue); int.TryParse(hours, out hoursValue); int.TryParse(minutes, out minutesValue); int.TryParse(seconds, out secondsValue); return new TimeSpan(daysValue, hoursValue, minutesValue, secondsValue); }
Да би оквир знао да је то обавезивање трансформације, атрибут СтепАргументТрансформатион мора бити додан методи која имплементира конверзију Аргумент.
Остале важне тачке које треба напоменути у вези са претварањем аргумената су:
# 1) Трансформације аргумента у кораку изводе се за сваки корак подударања, тј. Без обзира на врсту корака, тј. Да ли је дато, када или тада, трансформација ће се догодити за сваки подударни регуларни израз.
#два) У зависности од типа повратка трансформисаног излаза, ако стварни корак позивања нема одговарајући тип повратка за улазни параметар, трансформација се неће извршити.
Шта то значи, претпоставимо да позивни корак захтева трансформисани улаз, али има поменуту временску ознаку уноса као нешто што се не подудара са повратним типом трансформисане методе, тада ће подударање регуларног израза бити поништено и конверзија се неће извршити.
Погледајмо имплементацију позива „дати“ корак:
private TimeSpan ts; (Given(@'I have entered (.*) into the timestamp to minute converter')) public void GivenIHaveEnteredDaysIntoTheTimestampToMinuteConverter(TimeSpan tsTransformed) { ts = tsTransformed; }
Овде погледајте тип улазног параметра, тј. Његов ТимеСпан, који се подудара са типом враћеним из корака трансформације ако је овај промењен у неки други тип. На пример Стринг, тада се конверзија аргумента неће догодити и подударање регуларног израза биће поништено оригиналном имплементацијом корака.
Про врх: Овде је важно напоменути да је цео текст који треба трансформисати треба уносити / поклапати кроз корачну трансформацију аргумената. Дакле, дати корак ће сада умотати све могуће формате уноса у један низ, а регекс трансформације ће га претворити у објекат ТимеСпан и вратити натраг.Табеле спектра
Табеле спецфлов-а су начин за прослеђивање листе вредности у функцију корачне имплементације. У нашим претходним чланцима смо погледали начин примене тестова на основу података користећи оквир сценарија и примере. Али то је требало првенствено извршити сценарио са различитим улазима.
Овде се у табелама ради о преношењу свих података одједном у табеларном облику на имплементацију корака која даје податке.
На пример, размотрите пример где тестирате систем управљања студентима и да бисте креирали нови студентски објекат, од вас се тражи да попуните пуно детаља као што су име, презиме, старост, година рођења итд.
Један од начина је да сваку од ових информација проследите као засебан корак, што ће у основи бити пуно узорка и у сваком кораку ћете на крају ажурирати исти објекат који треба тестирати. Други начин може бити изградња сложеног регуларног израза и покушај прослеђивања свих података у истом кораку, али прилично је подложан грешкама и неупоредив.
Овде нам столови долазе у помоћ. Сви улазни подаци повезани са студентима могу се послати у исти корак имплементације на леп табеларни начин кроз табеларну карактеристику спецфлов-а.
Погледајмо у наставку узорак кода за примену функције и корака:
Scenario: Pass data through Specflow tables for StudentInfo object Given I have entered following info for Student | FirstName | LastName | Age | YearOfBirth | | test | student | 20 | 1995 | When I press add Then i student should get added to database and entered info should be displayed on the screen
Подаци табеле су истакнути у горњем кораку сценарија.
лажна адреса е-поште и лозинка која функционише
Спецфлов пружа пуно ТаблеХелперс-а, који директно омогућавају корисне функције попут стварања инстанце објекта од улазних података које је доставио корисник, уместо да самостално рашчлањују свако поље.
Погледајмо имплементацију корака у наставку:
private StudentInfo studInfo; (Given(@'I have entered following info for Student')) public void GivenIHaveEnteredFollowingInfoForStudent(Table table) { // converting supplied input data directly to instance of StudentInfo object studInfo = table.CreateInstance(); }
Погледајте горњи истакнути одељак. Ево само једног малог ретка кода, целокупног објекта СтудентИнфо (који је ПОЦО који садржи поља са подацима о студенту, тј. Име, презиме, старост, година рођења итд.)
Неке друге карактеристике / концепти повезани са табелама Спецфлов приказани су у наставку:
# 1) Табеле могу бити хоризонталне или вертикалне. Вертикалне таблице су више попут парова кључ / вриједност, ау горњем сценарију више попут пресликавања имена и вриједности, док хоризонталне таблице садрже све податке за објекат у једном реду (баш као што смо видјели у нашем примјеру).
#два) Вертикалне табеле могу се пресликати у само један .НЕТ објекат, док се хоризонталне табеле такође могу пресликати у скуп или збирку објеката.
# 3) Свака вредност поља у табели треба да буде атомска јер ће бити пресликана у једно одговарајуће поље у рашчлањеном објекту.
Овде је важно напоменути да чак и ако ви аутоматски генерисати корачно везивање са табеларним подацима, генератор повезивања Спецфлов аутоматски ће обрачунавати такве типове улаза и препознавати их као важеће табеларне податке.
Закључак
У овом чланку покушали смо да објаснимо 2 важна и згодна концепта у Спецфлов-у.
Први корак је Корак Аргумент трансформације који омогућавају претварање прилагођених типова за аргументе Спецфлов како би се избегао основни код (и омогућава тест скрипти да изгледа више модуларизовано и логично), а друга карактеристика коју смо погледали је Табеле спектра који вам добро дођу када у један корак треба да унесете мноштво поља / података у табеларном формату прилагођеном кориснику.
У нашем предстојећем упутству научићемо више о томе како можете аутоматски генерисати прелепу документацију помоћу Спецфлов-а у различитим форматима помоћу алата отвореног кода попут Пицклеса који могу послужити као лака референца за све заинтересоване стране у пројекту.
ПРЕВ Туториал |. | СЛЕДЕЋА Лекција
Препоручено читање
- Примена у МонгоДБ: Водич корак по корак
- Корак по корак инсталација и подешавање Аппиум Студио
- Пример Спецфлов-а и Селениум Вебдривер-а од краја до краја
- Детаљни водич за интеграцију КТП-а са АЛМ / КЦ
- 15 најпопуларнијих питања о интервјуу за Спецфлов
- Напредне везе спецфлов дељене и опсега, куке и поновна употреба корака
- Инсталирајте МонгоДБ на Виндовс: Водич корак по корак
- Како интегрисати ЈИРА са кТест: Водич корак по корак