如何模拟系统 class 进行类型转换
How to mock a system class for type casting
我有以下代码获取当前系统内存:
val memClass = (context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).memoryClass
我最初的目标是在测试中 return 一个 Int
值。像这样:
whenever((context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).memoryClass)
.thenReturn(500)
由于它是一个 jUnit 测试并涉及使用 Context
,我最终模拟了所有内容:
val context: Context = mock()
val activityService: Service = mock()
whenever(context.getSystemService(Context.ACTIVITY_SERVICE))
.thenReturn(activityService)
whenever((context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).memoryClass)
.thenReturn(500)
现在的问题是 Mockito
无法为 ActivityManager
创建类型转换并抛出此错误:
java.lang.ClassCastException: android.app.Service$MockitoMock4525704 cannot be cast to android.app.ActivityManager
我也试过模拟 ActivityManager 但它不能用作类型转换:
我没有坚持使用当前解决方案的具体要求。我会感谢更好的方法来实现我的初始目标。
我们可能有误会。我说的是这个:
val context: Context = mock()
val activityService: ActivityManager = mock()
whenever(context.getSystemService(Context.ACTIVITY_SERVICE))
.thenReturn(activityService)
whenever((context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).memoryClass)
.thenReturn(500)
据我了解:
context.getSystemService( ... ) returns 一个对象。
类android.app.ActivityManager和android.app.Service没有关系。
编辑:
最后一行可能需要替换为
的等价物(给定的代码可能不是正确的 kotlin 语法)
when(activityService.memoryClass).thenReturn(500);
我有以下代码获取当前系统内存:
val memClass = (context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).memoryClass
我最初的目标是在测试中 return 一个 Int
值。像这样:
whenever((context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).memoryClass)
.thenReturn(500)
由于它是一个 jUnit 测试并涉及使用 Context
,我最终模拟了所有内容:
val context: Context = mock()
val activityService: Service = mock()
whenever(context.getSystemService(Context.ACTIVITY_SERVICE))
.thenReturn(activityService)
whenever((context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).memoryClass)
.thenReturn(500)
现在的问题是 Mockito
无法为 ActivityManager
创建类型转换并抛出此错误:
java.lang.ClassCastException: android.app.Service$MockitoMock4525704 cannot be cast to android.app.ActivityManager
我也试过模拟 ActivityManager 但它不能用作类型转换:
我没有坚持使用当前解决方案的具体要求。我会感谢更好的方法来实现我的初始目标。
我们可能有误会。我说的是这个:
val context: Context = mock()
val activityService: ActivityManager = mock()
whenever(context.getSystemService(Context.ACTIVITY_SERVICE))
.thenReturn(activityService)
whenever((context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).memoryClass)
.thenReturn(500)
据我了解: context.getSystemService( ... ) returns 一个对象。
类android.app.ActivityManager和android.app.Service没有关系。
编辑:
最后一行可能需要替换为
的等价物(给定的代码可能不是正确的 kotlin 语法)
when(activityService.memoryClass).thenReturn(500);