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

时间:2019-08-29 13:40:13

标签: spring junit mockito

我是Mockito的新手,并且我尝试在list为null时抛出NullPoinerException(),在这种情况下,我在下面的代码中进行了测试,但我遇到了异常 java.lang.IllegalStateException:流已被操作或关闭

原始

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"));
        Stream<Employee>filterList = list.stream().filter(item->{
            return item.getName().startsWith("r");
        });

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

        return filterList.collect(Collectors.toList());
    }

测试:

@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();

}

1 个答案:

答案 0 :(得分:0)

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

filterListstream时,一旦过滤操作终止,它就会关闭。
以后再进行收集将不起作用。

您可以通过将其更改为以下方法来修复该方法:

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;
}

我也建议您不要扔NullPointerException。那只是不好的样式,请改用更适当的异常(或简单地返回一个空列表)。