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

Android开发:如何测试ScrollView滚动时isCalled()函数是否被调用

测试实现方案

前置依赖配置(未引入相关依赖时需要添加)

在模块级build.gradle的依赖节点添加如下配置:

dependencies {
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
    androidTestImplementation 'org.mockito:mockito-android:4.11.0'
    androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito-inline:2.28.3'
}

方案1:Mockito验证(无侵入业务代码的优先方案)

不需要修改原有业务逻辑,直接通过spy监听目标方法调用即可,适配自带的1秒延时:

@get:Rule
var activityScenarioRule = activityScenarioRule<MainActivity>()

@Test
fun checkScrollEventTriggerIsCalled() {
    var targetActivity: MainActivity? = null
    // 获取Activity实例并包装为spy对象,用于监听方法调用
    activityScenarioRule.scenario.onActivity { activity ->
        targetActivity = Mockito.spy(activity)
    }

    // 执行滑动操作触发滚动监听
    Espresso.onView(ViewMatchers.withId(R.id.scrollVw)).perform(ViewActions.swipeDown())

    // 等待延时任务执行完成,验证isCalled方法被调用1次
    Mockito.verify(targetActivity, Mockito.timeout(1500).times(1))?.isCalled()
}

方案2:标记位验证(无Mockito依赖的轻量方案)

需要少量修改业务代码,添加测试用标记位即可:

第一步:修改MainActivity业务代码

// 测试用标记位,可通过BuildConfig.DEBUG包裹避免带到生产包
var isCalledTriggered = false

fun isCalled() {
    isCalledTriggered = true
    // 原有isCalled的业务逻辑保留
}

第二步:编写测试逻辑

@get:Rule
var activityScenarioRule = activityScenarioRule<MainActivity>()

@Test
fun checkScrollEventTriggerIsCalled() {
    var targetActivity: MainActivity? = null
    activityScenarioRule.scenario.onActivity { activity ->
        targetActivity = activity
        // 测试前重置标记位
        targetActivity!!.isCalledTriggered = false
    }

    // 执行滑动操作
    Espresso.onView(ViewMatchers.withId(R.id.scrollVw)).perform(ViewActions.swipeDown())

    // 等待1.5秒确保延时任务执行完成
    Thread.sleep(1500)

    // 断言标记位状态符合预期
    assert(targetActivity?.isCalledTriggered == true)
}

优化建议

如果要避免使用Thread.sleep,可以给原有延时逻辑接入Espresso的CountingIdlingResource,让Espresso自动等待异步任务执行完成,无需硬编码等待时间。

注意:如果isCalled为私有方法,建议调整为包级私有或抽离到独立可测试类,避免反射带来的测试不稳定性


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:06:03