当Single引发异常时,使用.await()进行异常泛洪

时间:2018-12-13 19:58:34

标签: kotlin rx-java2 kotlinx.coroutines

我正在使用Spek为我的应用程序创建集成测试。我有一组Provider要测试,每个人都发出请求并解析响应。

describe("Providers")
{
    for(provider in providers)
    {
        on("Provider: $providerName")
        {
            try
            {
                //...
                val responsePromise = when (provider)
                {
                    is HtmlProvider -> connectionService.reactiveGetForHtml(connectionRequest)
                    is JsonProvider<*> -> connectionService.reactiveGetForJson(connectionRequest, provider.getJsonClass())
                    else -> throw IllegalStateException("Provider must be either Html or JSON")
                }

                val response = runBlocking { responsePromise.await() }

connectionService.reactiveGetForHtml() reactiveGetForJson()均返回RxJava2的SingleSource

问题:Provider中的一个引发了一堆异常(它必须解析一个大的JSON文件,并且由于数据模型的问题,杰克逊引发了大量的异常)。很好,测试旨在处理和报告此类错误。在这种情况下,有问题的Provider会因Jackson异常而无法通过自己的测试。但是,当跑步者执行剩余的测试用例时,就会发生奇怪的事情。由于相同的例外,所有接下来的Provider的测试均失败。无论runBlocking是什么,Provider都会不断地引发故障responsePromise的异常。不知道这是.await()的错误还是某些奇怪的行为,但是我不知道如何克服这个问题。 Provider的所有未引发多个异常的测试用例都运行良好,并报告了自己的错误,但是在执行该错误的Provider之后,所有操作都会失败。确切的Provider并非如此,如果我删除了这个特定的测试用例,则其他Provider抛出多个异常会引起类似的问题。

0 个答案:

没有答案