首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Android Espresso测试中期望异常-失败

在Android Espresso测试中期望异常-失败
EN

Stack Overflow用户
提问于 2019-01-22 18:05:38
回答 1查看 795关注 0票数 2

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

我做了一个测试,检查Intent extras格式。在实现中,在intent中获得不正确的值后,我抛出了一个异常。我想通过这个异常抛出的测试。运行带有“测试失败”和java.lang.IllegalArgumentException的测试结果,这与我试图捕获的结果相同。

我一开始尝试了这个注解:

@Test(expected = IllegalArgumentException::class)

然后,我尝试使用org.jetbrains.kotlin:kotlin-test依赖项和以下断言:

代码语言:javascript
代码运行次数:0
运行
复制
assertFailsWith<java.lang.IllegalArgumentException> {
    val activityIntent = Intent()
    activityIntent.putExtra("extra_connection_number", intentExtraConnectionNumber)
    activityRule.launchActivity(activityIntent)
}

同样重要的是,异常是从onCreateView开始抛出的:

代码语言:javascript
代码运行次数:0
运行
复制
@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不兼容,但我找不到正确的文档来帮助我解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2020-11-20 08:37:40

使用普通的try catch解决了我的问题,我知道异常是嵌套的。但是我们仍然可以通过原因来检查它:

代码语言:javascript
代码运行次数:0
运行
复制
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,但最终测试结果不稳定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54305748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档