安卓:无法对接收NPE的安卓函数进行单元测试



我刚刚开始在安卓中进行单元测试。我无法对 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

之后,您应该能够模拟最终类或方法。我遇到了与您相同的问题,这对我有用。

相关内容

  • 没有找到相关文章