You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Instrumentation测试报错:点击按钮未启动Activity B,意图匹配为0

问题:UI测试未检测到预期启动的Activity B

场景说明

存在两个Activity(A-B),Activity A的逻辑全部托管在其XML加载的Fragment中,自身无代码逻辑。需求是点击Fragment中的按钮后启动Activity B,但执行UI测试时报错未匹配到启动Activity B的Intent。

Fragment代码

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    binding?.openActivityBtn?.setClickListener {
        requireActivity().startActivity(Intent(requireActivity(),ActivityA::class.java))
        requireActivity().finish()
    }
}

测试代码(使用已废弃的ActivityTestRule)

@get:Rule
var activityRule = ActivityTestRule(ActivityA::class.java, false, false)

@Before
fun setUp(){
    Intents.init()
    activityRule.launchActivity(Intent())
}

@Test
fun shouldShowEmptyUI(){
    onView(isRoot()).check(noOverlaps())
    onView(withResourceName("some_ui_component")).check(matches(isDisplayed()))
    onView(withResourceName("some_ui_component")).check(matches(isDisplayed()))
    onView(withResourceName("open_activity_btn")).check(matches(isDisplayed()))
    onView(withResourceName("open_activity_btn")).perform(click())
    intended(hasComponent(ComponentName(ApplicationProvider.getApplicationContext(), ActivityB::class.java.name)))
}

@After
fun tearDown(){
    Intents.release()
}

测试报错信息

androidx.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: Wanted to match 1 intents. Actually matched 0 intents.

IntentMatcher: has component: has component with: class name: is "com.package.ActivityB" package name: an instance of java.lang.String short class name: an instance of java.lang.String

Matched intents:[]

解决方案

核心问题出在Fragment的点击事件代码中:你启动的是ActivityA而非需求中的ActivityB,导致测试时无法检测到启动ActivityB的Intent。

修改Fragment代码中的Intent目标类:

binding?.openActivityBtn?.setClickListener {
    // 将ActivityA::class.java改为ActivityB::class.java
    requireActivity().startActivity(Intent(requireActivity(), ActivityB::class.java))
    requireActivity().finish()
}

另外补充:ActivityTestRule已被官方废弃,建议迁移到ActivityScenario进行UI测试,它提供了更灵活的Activity生命周期控制方式。

内容的提问来源于stack exchange,提问作者Claude Hangui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:35:36