我正在使用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不兼容,但是我找不到正确的文档来帮助我解决问题。
答案 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,但最终结果出现了不稳定的结果。