Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mockito测试回收器查看单击错误_Java_Android_Unit Testing_Android Studio_Mockito - Fatal编程技术网

Java Mockito测试回收器查看单击错误

Java Mockito测试回收器查看单击错误,java,android,unit-testing,android-studio,mockito,Java,Android,Unit Testing,Android Studio,Mockito,我在我的RecyclerView点击中使用Mockito进行了一次测试,但抛出了一个错误 这是我的代码: @Test public void getUserClick() { RecyclerView rcv = Mockito.mock(RecyclerView.class); List<User> usersList = new ArrayList<>(); User commonUser = Mockito.mock(User.class

我在我的
RecyclerView
点击中使用Mockito进行了一次测试,但抛出了一个错误

这是我的代码:

@Test
public void getUserClick() {

    RecyclerView rcv = Mockito.mock(RecyclerView.class);
    List<User> usersList = new ArrayList<>();

    User commonUser = Mockito.mock(User.class);
    commonUser.setId("1");
    commonUser.setName("User");
    commonUser.setEmail("admin@admin.com");

    usersList.add(commonUser);

    UserAdapterTest adapter = Mockito.mock(UserAdapterTest.class);
    adapter.addData(usersList);

    rcv.setAdapter(adapter);

    // Test Click
    rcv.getChildAt(0).performClick();

    //Verify Click Item
    Mockito.verify(adapter).testClickItem(commonUser);
}
并且我的适配器已经实现了单击事件。

如果执行此操作:

RecyclerView rcv = Mockito.mock(RecyclerView.class);
rcv
成为模拟对象(在任何方法调用中,默认情况下返回
null
(或
0
,或
false
)的对象)。因此,默认情况下,
rcv.getChildAt(0)
将返回
null
,当您尝试对其调用
performClick()
时,会发生
NullPointerException

当您创建一个mock并希望某个方法返回一个特定值时,必须使用
Mockito.When()
告诉它。所以在你的情况下,你应该这样做:

// configure "when" behaviour **before** calling the getChildAt() method
Mockito.when(rcv.getChildAt(0)).thenReturn(objectYouWantToBeReturned);
显然,在使用
when
之前,您需要创建您想要的
对象。
上面的代码将使
rcv.getChildAt(0)
返回所需的对象,但仅当您使用参数
0
调用它时

如果要为任何值返回同一对象(不仅仅是
0
),可以执行以下操作:

Mockito.when(rcv.getChildAt(Mockito.anyInt())).thenReturn(objectYouWantToBeReturned);

这将返回
objectYouWantToBeReturned
,用于
getChildAt
的所有调用,无论参数值是什么。

谢谢@Hugo,成功了!。只有点击有问题,从不调用事件,否则我没有表格来验证。
Mockito.when(rcv.getChildAt(Mockito.anyInt())).thenReturn(objectYouWantToBeReturned);