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

如何编写测试用例验证Android客户端绑定跨应用bound service的流程

绑定服务流程的测试用例方案

第一类:本地单元测试(无需真机/模拟器,运行在JVM)

这类测试可以快速验证生命周期内的方法调用逻辑,依赖Mockito或MockK这类Mock框架实现。

  • 测试onStart绑定逻辑:
    验证bindService被调用一次,且传入的Intent组件名、绑定flag完全符合预期,不需要真实触发服务绑定。
    示例代码(基于MockK+Kotlin,Java逻辑完全一致):
    @Test
    fun `onStart触发时应使用正确参数绑定服务`() {
        val mockContext = mockk<Context>(relaxed = true)
        val testActivity = spyk(BindingActivity())
        every { testActivity.baseContext } returns mockContext
    
        // 触发onStart生命周期
        testActivity.onStart()
    
        // 校验参数正确性
        val expectedComponent = ComponentName(SERVICE_APP_PACKAGE_NAME, SERVICE_NAME)
        verify(exactly = 1) {
            mockContext.bindService(
                match { it.component == expectedComponent },
                any<ServiceConnection>(),
                eq(Context.BIND_AUTO_CREATE)
            )
        }
    }
    
  • 测试onStop解绑逻辑:
    验证unbindService被调用一次,且调用后mBound标记位被重置为false。
    示例代码:
    @Test
    fun `onStop触发时应解绑服务并重置绑定标记`() {
        val mockContext = mockk<Context>(relaxed = true)
        val testActivity = spyk(BindingActivity())
        every { testActivity.baseContext } returns mockContext
        // 先模拟已绑定状态
        testActivity.mBound = true
        // 反射拿内部的ServiceConnection实例
        val connField = BindingActivity::class.java.getDeclaredField("connection").apply {
            isAccessible = true
        }
        val testConn = connField.get(testActivity) as ServiceConnection
    
        // 触发onStop生命周期
        testActivity.onStop()
    
        verify(exactly = 1) { mockContext.unbindService(eq(testConn)) }
        assertFalse(testActivity.mBound)
    }
    
  • 测试ServiceConnection回调逻辑:
    分别触发onServiceConnected和onServiceDisconnected回调,验证mBound标记位和mService实例的赋值逻辑符合预期。

第二类:集成测试(需运行在真机/模拟器)

这类测试覆盖真实的跨进程绑定流程,验证端到端的功能正确性。

  • 正常绑定流程验证:
    预先安装服务端APK,启动BindingActivity后点击触发调用的按钮,校验弹出的Toast内容为数字格式,说明绑定成功、服务方法正常调用。
  • 解绑流程验证:
    绑定成功后按Home键将Activity退到后台,校验服务端的onUnbind方法被触发(可通过服务端预置的测试标记位或日志判断)。
  • 异常场景验证:
    卸载服务端APK后启动BindingActivity,点击按钮校验无崩溃抛出,mBound始终为false。

提示:如果要测试异常绑定场景,比如服务端被杀死后的自动重连逻辑,也可以在集成测试中通过adb命令杀死服务端进程后观测客户端的表现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:03