我是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();
}
答案 0 :(得分:0)
错误来自您的方法,与测试无关。
filterList
是stream
时,一旦过滤操作终止,它就会关闭。
以后再进行收集将不起作用。
您可以通过将其更改为以下方法来修复该方法:
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
。那只是不好的样式,请改用更适当的异常(或简单地返回一个空列表)。