【发布时间】:2017-02-28 23:36:42
【问题描述】:
我已经编写了一个使用 Java 流的方法,它简单地迭代对象列表并返回 true/false 是否满足特定条件
Java 方法:
boolean method(SampleObj sampleObj) {
List testList = invokeSomeMethod();
int result = testList
.parallelStream()
.filter(listObj -> (listObj.getAttr() = 1))
.count(listObj -> listObj.isAttr4());
return (result > 10);
}
我也为此编写了一个 Mock 测试用例。当我执行测试用例时,测试成功,但是我收到项目自定义错误,指出创建的所有线程都没有关闭。
我什至尝试将流与 try-with-resources 一起使用,但 noo 没有帮助。
模拟测试:
@Test
public void testSomeMethod() {
SampleObj sampleObj1 = new SampleObj(10, 20, 30, true);
SampleObj sampleObj2 = new SampleObj(10, 20, 30, true);
SampleObj sampleObj3 = new SampleObj(10, 20, 30, false);
SampleObj sampleObjTest = new SampleObj(10, 20, 30, true);
List<SampleObj> testList = new ArrayList<SampleObj>();
testList.add(sampleObj1);
testList.add(sampleObj2);
testList.add(sampleObj3);
when(mockedAttribute.invokeSomeMethod()).thenReturn(nodeList);
ClassToBeTested classTest = createGenericMockRules();
Assert.assertTrue(classTest.method(sampleObjTest));
}
附:我已经调试确认当调用 invokeSomeMethod() 时,我的模拟 testList 被返回。
据我所知,Java 流会在内部关闭它创建的线程。 我是否执行不正确?
【问题讨论】:
-
你在嘲笑什么?你能展示你的测试用例吗?
-
添加代码sn-p
-
附带说明,
== true表达式总是多余的。 -
@learningMyWayThru 你能显示你得到的实际错误吗?
-
1.您正在使用原始类型
List。如果没有元素类型,则既不能找到getAttr()也不能找到isAttr4()。 2.listObj.getAttr() = 1是一个尝试的无效assignment。 3.Stream.count()没有参数。为什么要发布该代码,而它显然与真实代码无关?
标签: java multithreading unit-testing java-stream