我刚刚开始在安卓中进行单元测试。我无法对 android 内部方法进行单元测试来通知数据已更改(通知数据集已更改(,并且在这一点上我收到空指针异常。我正在使用 mockito 和 power moockito 来模拟不同的对象。
public void RecyclerView(String value,Bitmap image) {
RecyclerViewAdapter adapter = new RecyclerViewAdapter(MainActivity.this);
recyclerView.setAdapter(adapter);// set adapter on recyclerview
adapter.notifyDataSetChanged();// Notify the adapter
}
我的单元测试是:
@RunWith(PowerMockRunner.class)
@PrepareForTest({MainActivity.class})
public class MainActivityTest {
@Mock
Bitmap bitmap;
@Mock
RecyclerView recycleview;
@InjectMocks
Activity activity;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mainactivity = new MainActivity();
}
@Test
public void PopulateRecyleViewTest() {
try {
final RecyclerViewAdapter abc = PowerMockito.mock(RecyclerViewAdapter.class);
PowerMockito.whenNew(RecyclerViewAdapter.class).withArguments(mainactivity).thenReturn(abc);
doNothing().when(abc).notifyDataSetChanged(); //do nothing getting exception here
mainactivity.recyclerView = recycleview;
mainactivity.PopulateRecyleView("", bitmap);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
有没有办法对此方法进行单元测试,以便通知数据集更改((不会给出NPE(空指针异常(?我已经读过电源模拟用于单元测试最终方法,但它似乎不是单元测试通知DataSetChanged,这是最终方法。任何帮助将不胜感激。
Acc to Android 文档 - "如果你的单元测试没有依赖项,或者只有简单的 Android 依赖项,你应该在本地开发机器上运行你的测试">
Mockito/PowerMockito运行在你的JVM上。
@InjectMocks
Activity activity;
模拟活动并不简单,这就是我们有插存单元测试的原因。我在上面的测试用例中看到了很多问题。我认为你应该在你的案例中写仪表案例。
在拥有更多 Java 对象的地方使用 Mockito/PowerMockito,例如演示文稿类(在 MVP 架构中(或任何业务逻辑。
请在此处查看有关测试的 android 文档。这将为您提供在 Android 中编写单元测试用例的方法和方法的正确图片。
使用 Mockito 2.0 及更高版本,您可以通过添加文件来模拟最终类和方法。查看此文档:模拟不可模拟:选择加入模拟最终类/方法
基本上它指出您必须创建文件src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
然后添加单行:
mock-maker-inline
之后,您应该能够模拟最终类或方法。我遇到了与您相同的问题,这对我有用。