我正在使用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
抛出多个异常会引起类似的问题。