如何在Android Studio中运行单元测试时测试支持库类?
根据http://tools.android.com/tech-docs/unit-testing-support上的介绍,它与默认的Android类一起工作:
那么我将收到错误信息:
单元测试在开发机器上的本地JVM上运行。我们的gradle插件将编译src/test/java中找到的源代码,并使用通常的Gradle测试机制执行它。在运行时,测试将针对已剥离所有final修饰符的android.jar的修改版本执行。这使您可以使用流行的模拟库,如Mockito。
但是,当我尝试在RecyclerView适配器上使用Mockito时,如下所示:
@Before
public void setUp() throws Exception {
adapter = mock(MyAdapterAdapter.class);
when(adapter.hasStableIds()).thenReturn(true);
}
那么我将收到错误信息:
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
2. inside when() you don't call method on mock but on some other object.
3. the parent of the mocked class is not public.
It is a limitation of the mock engine.
原因是支持库没有提供一个"去掉所有final修饰符的jar文件"。
那怎么测试呢?也许通过子类化和重写final方法(这并不起作用,所以不行)。也许需要使用PowerMock?