Я тестирую, учусь использовать Огурец и у меня есть Сценарий следующим образом:
Given a standard party
And a flight from "UK" to "Europe"
When I search
And I receive search results
Then I can book my holiday
В шаге «Определение шага 2» я запрашиваю базу данныхиспользуя JDBI и получить набор данных, который я могу перебрать и использовать в качестве данных поиска для шага 3 в API, к которому я отправляю запросы.Довольно часто не получают никаких результатов в первых 2 или 3 запрашиваемых строках.Это бесполезно для меня, потому что сценарий на самом деле не проверяет, возвращаются ли результаты (хотя это явно допустимый сценарий).
Что я действительно хочу, так это вернуть результаты, а затем утверждать, что я могу забронировать- в пределах этого Step Def проверяются на правильную цену и т. д. *
Итак, если
And I receive search results
равно false, как я могу вернуться к
And a flight from.....
* 1017?* ... чтобы я мог попробовать следующий ряд данных.
Мой запрос в контексте определений шага огурца, какой это лучший / идиоматический способ сделать это, учитывая, что для каждого цикла находится на более раннем шаге?
Существует ли общее соглашение о повторных попытках в таких случаях?Я не могу просто вызвать базовый метод поиска снова, потому что у меня есть много методов Step Def поиска, все приклеенные к шагам, и «И я получаю ...», в котором я получаю объект ответа, не имеет понятия предыдущего шага.
И рейс из "Великобритании" в "Европу":
@And("^a flight from \"([^\"]*)\" to \"([^\"]*)\"$")
public void aFlightFromContinentOneToContinentTwo(String continentOne, String continentTwo) {
airportsAndDates = searchWorld.airportsAndDates();
supplierCode = supplierCredentials.getSupplierCode();
ReposMasterConnection rm = new ReposMasterConnection();
origins = getContinentOne(continentOne);
destinations = getContinentTwo(continentTwo);
rm.initialiseDatabaseConnection();
List<FlightDataBean> dataSet = rm.lastFlightBookedResultsByRegion(supplierCode, origins, destinations);
for (FlightDataBean i : dataSet) {
String startDate = i.getStartDate();
String endDate = i.getEndDate();
String origin = i.getOrigin();
String destination = i.getDestination();
String start = getStartDate(startDate);
String end = getEndDate(endDate);
if (startDate != null) {
DateRange dateRange = new DateRange()
.withStartDate(start)
.withEndDate(end);
airportsAndDates.
withDepartureDateRange(dateRange).
withDepartureAirports(departureAirportList(origin)).
withDestinationChoice(destinationChoice(destinationAirportList(destination)));
}
}
}
Когда я ищу ... // еще один Stepdef, который отправляет запрос
Затем я получаюрезультаты поиска:
@Then("^I receive search results$")
public void iReceiveSearchResults() {
response = given().contentType(ContentType.XML).body(packageAvailRequest).when().post().then().extract().response();
String status = requestWorld.getAppRequest().getAvailabilityResponseObject().getSearchResponseStatus(response);
requestWorld.getAppRequest().getAvailabilityResponseObject().setResponse(response);
errorMessage = requestWorld.getAppRequest().getFirstBasketResponseObject().getError(response);
warningMessage = requestWorld.geAppRequest().getFirstBasketResponseObject().getWarning(response);
if (errorMessage != null && !errorMessage.isEmpty()) {
scenario.write("Error: " + errorMessage);
}
if (warningMessage != null && !warningMessage.isEmpty()) {
scenario.write("Warning: " + warningMessage);
}
assertEquals("true", status);
}
Ясно, что мне не нужно иметь цикл для каждого цикла в шаге И, но есть какой-то способ перемещения курсора на следующую строку данных.