在代码中使用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
),但遗憾的是,ArraySet
是final
。 :-(