JVM Рассмотрим следующий сценарий огурец: -Асинхронное выполнение шага с огурцом-
Scenario: Test payment
Given I login to terminal
When POS token is generated asynchronously
Then user generates mobile token
And payment is successful
Стадию «POS маркер генерируется асинхронно» необходимо выполнить асинхронно и не должен блокировать выполнение последующих шагов после него. Я смог сделать это с помощью FutureTask в Java. Однако в случае сбоев я не могу утверждать неудачи. Ниже приведен фрагмент кода
@When("^POS token is generated asynchronously$")
public void gs_Consumer() throws Throwable {
HashMap<String, Object> m = DataContainer.getDataMap();
ExecutorService executor = Executors.newFixedThreadPool(2);
FutureTask<Object> futureTask1 = null;
futureTask1 = new FutureTask<Object>(new Callable<Object>() {
public Object call() throws Exception {
DataContainer.setDataMap(m);
try {
retrieve_consumer_information();
} catch (Throwable e) {
DataContainer.getDataMap().put("exception", e);
throw new Exception(e);
}
return null;
}
});
executor.execute(futureTask1);
DataContainer.getDataMap().put("response", futureTask1);
// Shutdown the ExecutorService
executor.shutdown();
}
Тогда я получаю ответ в загробной метода, так как я не могу сделать futureTask1.get() внутри этого метода, как он будет блокировать выполнение от выполнения других последующих стадиях.
public void afterAsynchMethod() {
try {
((FutureTask<Object>) DataContainer.getDataMap().get("response")).get();
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
Assert.fail(e.getMessage());
}
}
Теперь, если исключение происходит в методе After, сценарий по-прежнему не отражается как неудачный сценарий. Как я могу отказаться от сценария в этом случае или любых других способов сделать это?
У нас было очень похожее применение при создании тестов системной интеграции с использованием огурца, поэтому мы создали небольшую библиотеку, которая намного легче реагирует на асинхронные события в тестах: https://github.com/zalando/switchboard –
@ JörnHorstmann your ghthub link теперь 404, можете ли вы проверить, был ли проект перемещен в другом месте? – Eddy
@Eddy У оригинального разработчика все еще есть вилка в его учетной записи github на https://github.com/whiskeysierra/switchboard. Кажется, проект был не таким интересным для более широкой аудитории, и поэтому был удален, чтобы уменьшить беспорядок. –