未对单元测试中的Android ArraySet进行模拟

在代码中使用android.util.ArraySet时,我无法在非Android测试类中使用它来测试类,因为它会引发异常:

  

java.lang.RuntimeException:android.util.ArraySet中添加的方法未模拟。有关详细信息,请参见http://g.co/androidstudio/not-mocked

链接显示:

  

这是为了确保您的单元测试仅测试您的代码,并且不依赖于Android平台的任何特定行为(您尚未明确模拟例如使用Mockito)

如何使用ArraySet单元测试代码?我会说通过某种方式“替换为HashSet”来模拟(Mockito,PowerMock)可能是有希望的:

要测试的代码:

Set<Bird> birds = new ArraySet<>();
birds.add(currentBird);

测试代码:

whenNew(ArraySet.class).withAnyArguments().thenAnswer(new Answer<Object>() {
    @Override
    public Object answer(invocationOnmock invocation) throws Throwable {
        return new HashSet();
    }
});

这给出了java.lang.ClassCastException: java.util.HashSet cannot be cast to android.util.ArraySet

一种解决方法是不返回HashSet,而是返回某些MyFakeArraySet extends ArraySet(内部使用HashSet),但遗憾的是,ArraySetfinal。 :-(

zhaozhixuan 回答:未对单元测试中的Android ArraySet进行模拟

您不应在非Android测试类中使用android sdk类。
但是,如果需要,您可以使用类似以下的内容:

[9624,41822,49462,46525]
,

我发现测试文件夹中的类似乎具有优先权。因此,我不必嘲笑任何东西。我可以将一个软件包mylist = [1,2,3,4,5,1] list(set(mylist)) 放入我的测试文件夹中,然后将一个android.util类完全由我指定:

ArraySet
本文链接:https://www.f2er.com/3108964.html

大家都在问