Spring java.lang.IllegalStateException:流已在junit中操作或关闭

Spring java.lang.IllegalStateException:流已在junit中操作或关闭,spring,junit,mockito,Spring,Junit,Mockito,我是Mockito新手,我尝试在列表为null时抛出NullPoinerException(),对于这个场景,我使用了下面的代码进行测试,但我得到了异常java.lang.IllegalStateException:流已经被操作或关闭 起初的 public ListgetEmployeesListStartWithA(){ Listlist=新的ArrayList(); 列表。添加(新员工(1,“ram”ram@gmail.com")); 列表。添加(新员工(2,“santhosh”santho

我是Mockito新手,我尝试在列表为null时抛出NullPoinerException(),对于这个场景,我使用了下面的代码进行测试,但我得到了异常java.lang.IllegalStateException:流已经被操作或关闭

起初的
public ListgetEmployeesListStartWithA(){
Listlist=新的ArrayList();
列表。添加(新员工(1,“ram”ram@gmail.com"));
列表。添加(新员工(2,“santhosh”santhosh@gmail.com"));
列表。添加(新员工)(3,“丽塔”rita@gmail.com"));
列表。添加(新员工)(4,“ramesh”ramesh@gmail.com"));
StreamfilterList=list.stream().filter(项->{
return item.getName().startsWith(“r”);
});
if(filterList==null | | filterList.collect(Collectors.toList()).size()=0){
抛出新的NullPointerException();
}
return filterList.collect(Collectors.toList());
}
测试:
@测试
public void GetEmployeesListStartWithTest(){
Listlist=新的ArrayList();
列表。添加(新员工(1,“ram”ram@gmail.com"));
列表。添加(新员工)(3,“丽塔”rita@gmail.com"));
列表。添加(新员工)(4,“ramesh”ramesh@gmail.com"));
doReturn(null).when(configurationClass).getEmployeesListStartWithA();
doThrow(新的NullPointerException()).when(configurationClass).getEmployeesListStartWithA();
}

错误来自您的方法,与测试无关

filterList
是一个
一旦过滤操作终止,它就会关闭。
以后在上面做收集将不起作用

您可以将该方法更改为:

public List<Employee> getEmployeesListStartWithA() {

    List<Employee>list = new ArrayList<>();
    list.add(new Employee(1, "ram", "ram@gmail.com"));
    list.add(new Employee(2, "santhosh", "santhosh@gmail.com"));
    list.add(new Employee(3, "rita", "rita@gmail.com"));
    list.add(new Employee(4, "ramesh", "ramesh@gmail.com"));
    List<Employee>filterList = list.stream().filter(item->{
        return item.getName().startsWith("r");
    }).collect(Collectors.toList());

    if(filterList==null || filterList.size()==0){
       throw new NullPointerException();
    }

    return filterList;
}
公共列表getEmployeesListStartWithA(){
Listlist=新的ArrayList();
列表。添加(新员工(1,“ram”ram@gmail.com"));
列表。添加(新员工(2,“santhosh”santhosh@gmail.com"));
列表。添加(新员工)(3,“丽塔”rita@gmail.com"));
列表。添加(新员工)(4,“ramesh”ramesh@gmail.com"));
ListfilterList=list.stream().filter(项->{
return item.getName().startsWith(“r”);
}).collect(Collectors.toList());
if(filterList==null | | filterList.size()==0){
抛出新的NullPointerException();
}
返回过滤器列表;
}

另外,我建议您不要抛出
NullPointerException
。这是一种糟糕的样式,请改用更合适的异常(或者只返回一个空列表)。

此外,我建议您不要抛出NullPointerException。这是一种糟糕的风格,使用一个更合适的异常来代替(或者只是返回一个空列表)。-->那么什么是合适的方法,你能指导我吗?我如何为上述方法编写测试用例?你能解释一下吗?返回空列表将是最合适的做法。您应该只针对所需的输出进行测试。通过阅读您的测试代码,我不确定您是想测试这个方法还是想模拟这个方法(当它被另一个类使用时)?您是否可以粘贴一些代码,然后它可能对我有用您的
原始
看起来像一个硬编码的示例,这不是您要测试的代码,或者?对于
真实世界的
方法,我假设
list
实际上是一个参数以及起始字母?--只要我不知道你到底想做什么,那是不可能的,你可以打开一个聊天室,我们继续在那里讨论?
@Test
public void getEmployeesListStartWithATest(){
    List<Employee>list = new ArrayList<>();
    list.add(new Employee(1, "ram", "ram@gmail.com"));
    list.add(new Employee(3, "rita", "rita@gmail.com"));
    list.add(new Employee(4, "ramesh", "ramesh@gmail.com"));
doReturn(null).when(configurationClass).getEmployeesListStartWithA();
    doThrow(new NullPointerException()).when(configurationClass).getEmployeesListStartWithA();

}
public List<Employee> getEmployeesListStartWithA() {

    List<Employee>list = new ArrayList<>();
    list.add(new Employee(1, "ram", "ram@gmail.com"));
    list.add(new Employee(2, "santhosh", "santhosh@gmail.com"));
    list.add(new Employee(3, "rita", "rita@gmail.com"));
    list.add(new Employee(4, "ramesh", "ramesh@gmail.com"));
    List<Employee>filterList = list.stream().filter(item->{
        return item.getName().startsWith("r");
    }).collect(Collectors.toList());

    if(filterList==null || filterList.size()==0){
       throw new NullPointerException();
    }

    return filterList;
}