Тестовый сценарий заключается в получении результата от службы фиктивного клиента, вызываемой асинхронно. Здесь, если я попытаюсь запустить упомянутые тесты индивидуально, они будут выполнены успешно. Но при попытке построить проект с помощью mvn clean install
, контрольный пример успеха выдает ошибку.
Как мне обработать сценарий исключения, чтобы он не влиял на ожидаемые сценарии поведения метода? Или, возможно, в чем причина нескольких асин c вызовов? Как мне обработать / завершить порожденный поток или дождаться его завершения, прежде чем начать следующий клиентский вызов?
// SERVICE CLASS
public String serviceMethod(String arg1, String arg2) {
return mockedclient.fetchDetails(arg1, arg2)
.toCompletableFuture()
.thenapplyasync(HashSet::new) // assuming the received response is a list
.get(3,TimeUnit.SECONDS);
}
//TEST CLASS
def " should return result retrieved from the client" () {
given:
def arg1 = "value1"
def arg2 = "value2"
def futureList = CompletableFuture.completedFuture(Collections.toList("RESULT"))
def futureSet = new BlockingVariable<Set<String>>()
when:
def result = serviceMethod(arg1, arg2)
then:
1 * mockedClient.fetchDetails(_) >> futureList
0 * futureList.thenApplyAsync(_) >> futureSet
0 * futureSet.get(_,_) >> Collections.toSet("RESULT")
}
def " should return empty response when result retrieved from the client" () {
given:
def arg1 = "value1"
def arg2 = "value2"
def futureList = CompletableFuture.completedFuture(Collections.toList("RESULT"))
def futureSet = new BlockingVariable<Set<String>>()
when:
def result = serviceMethod(arg1, arg2)
then:
1 * mockedClient.fetchDetails(_) >> CompletableFuture.runAsync( { throw new Exception("Failed to fetch broker Analyst details " } )
0 * futureList.thenApplyAsync(_) >> futureSet
0 * futureSet.get(_,_) >> Collections.toSet("RESULT")
}