我正在使用Kotlin在Espresso中为我的Android应用程序编写测试。我希望在单元测试中出现异常,如果发现这样的异常,则通过测试。
我做了一个测试,检查Intent extras格式。在实现中,在intent中获得不正确的值后,我抛出了一个异常。我想通过这个异常抛出的测试。运行带有“测试失败”和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
开始抛出的:
@Throws(java.lang.IllegalArgumentException::class)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val layout = inflater.inflate(R.layout.configuration_fragment, container, false)
var connectionNumber: Int? =
activity!!.intent.getIntExtra(resources.getString(R.string.extra_connection_number), -1)
if (connectionNumber == -1) {
throw IllegalArgumentException()
}
(...)
意图是用给定的额外内容创建的,它在我希望它失败的地方失败了。但是抛出的异常不会被Espresso捕获。为什么?我遗漏了什么?
我知道它可能与Espresso不兼容,但我找不到正确的文档来帮助我解决这个问题。
发布于 2020-11-20 00:37:40
使用普通的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,但最终测试结果不稳定。
https://stackoverflow.com/questions/54305748
复制相似问题