2

我有以下代码来获取当前系统内存:

val memClass = (context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).memoryClass

我最初的目标是在测试中为它返回一个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$MockitoMock$594525704 cannot be cast to android.app.ActivityManager

我也尝试模拟 ActivityManager 但它不能用作类型转换:

在此处输入图像描述

我没有坚持使用当前解决方案的具体要求。我会欣赏一种更好的方法来实现我的初始目标。

4

1 回答 1

2

或许我们有误会。我在说的是这样的:

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( ... ) 返回一个对象。

类 android.app.ActivityManager 和 android.app.Service 之间没有关系。


编辑:

最后一行可能需要替换为
(给定的代码可能不是正确的 kotlin 语法)

    when(activityService.memoryClass).thenReturn(500);
于 2019-06-30T06:43:38.643 回答