在Android Espresso测试中预期出现异常-失败

时间:2019-01-22 10:05:38

标签: android exception kotlin android-espresso

我正在使用Kotlin在Espresso中为我的Android应用程序编写测试。 我希望能像在单元测试中一样发生异常,并且如果发现这样的异常,则通过测试。

我进行了一项测试,检查Intent extras格式。 在实现中,我在意图中获取了不正确的值后抛出了异常。 我想通过测试是否抛出此异常。使用“测试失败”和photos = Photo.objects.annotate(c=Count('labels')) one = photos.exclude(c__lte=4) two = photos.filter(painting=True) all = one.union(two, all=True) one.count() + two.count() == all.count() >>> True 运行测试结果,这与我尝试捕获的结果相同。

我最初尝试使用此批注:

java.lang.IllegalArgumentException

然后我尝试使用@Test(expected = IllegalArgumentException::class)依赖性和以下断言:

org.jetbrains.kotlin:kotlin-test

同样重要的是,assertFailsWith<java.lang.IllegalArgumentException> { val activityIntent = Intent() activityIntent.putExtra("extra_connection_number", intentExtraConnectionNumber) activityRule.launchActivity(activityIntent) } 开头的异常是这样抛出的:

onCreateView

意图是使用给定的额外内容创建的,在我希望它失败的地方失败了。但是,抛出的异常不会被Espresso捕获。 为什么?我想念什么?

我知道它可能与Espresso不兼容,但是我找不到正确的文档来帮助我解决问题。

1 个答案:

答案 0 :(得分:0)

使用正常的try catch解决了我的问题,我知道嵌套了异常。但是我们仍然可以按原因进行检查:

var error: Throwable? = null
try {
    onView(something).perform(click())
} catch (e: Throwable) {
    error = e;
}
assert(error!!.cause is MySpecificException)
assert(error!!.cause!!.message == "My specific error message")

我尝试了另外一个approach,但最终结果出现了不稳定的结果。