junit 在RxJava 3中测试抛出用例

nhhxz33t  于 2022-11-11  发布在  Java
关注(0)|答案(1)|浏览(141)

我尝试测试用例时,我的rx链应该抛出异常,但遇到了问题。当我尝试调用assertError(error)时,它说没有发现错误。下面是一个示例:

fun isAvailable(): Single<String> {
    return mapper.getSymbol().map { symbol ->
       if (repository.isAvailable(symbol)) {
          symbol
       } else {
          throw Exception("Symbol is not available")
       }
    }
}

在测试中,我模拟仓库返回false,然后做如下操作:

val error = Exception("Symbol is not available")
whenever(mapper.getSymbol()).thenReturn(
    Single.just(
        symbol
    )
)
whenever(repository.isAvailable(symbol)).thenReturn(false)
val test = symbolsRepository.isAvailable().test()

test.await()
    .assertError(error)

但是,当我运行测试时,我发现错误不存在(闩锁= 0,值= 0,错误= 1,完成= 0),原因是:java.lang.Exception:符号不可用

j91ykkif

j91ykkif1#

正如@gpunto所说,assertErrorException上进行相等检查,在标准Java中,除了引用相等之外,默认情况下不会实现这些检查。
您可以使用assertError的其他两个多载来检查例外状况类别及其消息:

test.awaitDone()
    .assertError(error.getClass())
    .assertError({ it.getMessage().equals(error.getMessage()) })

相关问题