如何在Kotlin中构造含模拟数据的Android PackageInfo对象列表
构造Android PackageInfo模拟数据的实现方案
实现思路
- 由于你需要通过
packageInfoItem.applicationInfo.packageName获取包名,核心需要给PackageInfo的applicationInfo成员构造有效实例,给ApplicationInfo的packageName字段赋值目标包名即可 - 其余未用到的
PackageInfo字段可留空或赋默认值,不影响目标调用逻辑
完整实现代码
val packages = listOf( PackageInfo().apply { // 构造模拟的ApplicationInfo applicationInfo = ApplicationInfo().apply { packageName = "com.example.test.app1" // 替换为你需要的模拟包名 // 其他需要用到的ApplicationInfo属性可在此补充 } // 可选:补充其他PackageInfo属性 packageName = "com.example.test.app1" firstInstallTime = System.currentTimeMillis() - 86400000 // 模拟1天前安装 lastUpdateTime = System.currentTimeMillis() }, // 可继续添加更多模拟应用数据 PackageInfo().apply { applicationInfo = ApplicationInfo().apply { packageName = "com.example.test.app2" } packageName = "com.example.test.app2" } )
调用验证
packages.forEach { packageInfoItem -> val packageName = packageInfoItem.applicationInfo.packageName // 可正常拿到模拟的包名做后续逻辑 }
单元测试场景特殊说明
如果是在本地JVM跑单元测试,无法直接实例化Android原生类,可使用Mock框架构造模拟对象,以MockK为例:
val mockPackageInfo = mockk<PackageInfo> { every { applicationInfo } returns mockk<ApplicationInfo> { every { packageName } returns "com.example.test.app1" } } val packages = listOf(mockPackageInfo)
内容的提问来源于stack exchange,提问作者Bob Redity
相关产品推荐
相关产品推荐

