我在下面使用Java 8流代码将ID添加到对象列表中。但是,我不断收到错误'流已经被操作或关闭'。但是,我只打开一个流,而另一个被调用的代码不使用流,因为我最近开始指向JDK 1.8。
我还要注意,我在测试时看到了使用JUnit的错误,因此不确定是否会出现问题。
有什么想法吗?
编辑:删除了原始代码并添加了简化示例。问题似乎与使用@Mocked方法参数有关。
public class FooService {
public Collection<Course> getCourses() {
List<Course> result = Arrays.asList(new Course(), new Course(), new Course());
result.stream().forEach(c -> c.setUrl("foobar"));
return result;
}
}
场
public class Course {
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
private String url;
}
测试代码
@RunWith(JMockit.class)
public class FooServiceTest {
@Tested
FooService foobarService;
@Test
public void testOne(@Mocked Collection<String> bar) {
foobarService.getCourses();
}
@Test
public void testTwo(@Mocked Collection<String> bar) {
foobarService.getCourses();
}
}
如果我删除了@Mocked方法,则测试通过而没有Stream错误。
答案 0 :(得分:1)
您确定要/需要在代码中模拟集合吗? @Mocked注释意味着将从您从该方法执行的任何代码中模拟泛型类型String的所有集合。我不太确定你为什么要这样做,但如果你这样做,你可能需要使用Expectations块指定集合的行为。