【发布时间】:2015-10-24 23:07:47
【问题描述】:
我正在编写一个测试,目的是测试Adapter 类的子类中的一些方法(由RecyclerView 使用)。为了模拟适配器行为,我选择了 Mockito 库。
这是一个简单的测试:
import android.support.v7.widget.RecyclerView.Adapter;
public class TestAdapter {
@Test
public void testAdapter() throws Exception {
Adapter adapter = Mockito.mock(Adapter.class);
adapter.notifyDataSetChanged();
}
}
什么都不会发生,但会抛出 NullPointerException。
java.lang.NullPointerException
at android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged(RecyclerView.java:5380)
at pl.toro.test.adapter.TestAdapter.testAdapter(TestAdapter.java:38)
...
我也尝试过使用spy 而不是mock
@Test
public void testAdapterWithDoNothing() throws Exception {
Adapter adapter = Mockito.spy(new Adapter() {...});
doNothing().when(adapter).notifyDataSetChanged();
}
但这在第二行失败(注意这只是一个模拟设置)
java.lang.NullPointerException
at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyChanged(RecyclerView.java:8946)
at android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged(RecyclerView.java:5380)
at pl.toro.test.adapter.TestAdapter.testAdapterWithDoNothing(TestAdapter.java:59)
...
是否可以在单元测试中使用 Mockito 模拟支持类?
【问题讨论】:
标签: android unit-testing mockito