【问题标题】:How to use loop and stream for my junit test? [duplicate]如何为我的 junit 测试使用循环和流? [复制]
【发布时间】:2020-11-21 21:58:05
【问题描述】:

我有以下测试:

@Test
void verifyCorrectLimitForGroups() throws SQLException {
    AbstractDAO<StudentModel, Long> studentsDAO = new StudentDAO(myDatasource);
    List<StudentModel> students = studentsDAO.findAll();
    for(int a=1;a<11;a++) {
        assertTrue(students.stream().filter(i->i.getGroupID()==a).count()<30);
    }
}

我的目标是测试 groupIDs 从 1 到 10 的学生是否从未超过 30 的限制。为此,我决定使用 java 8 API 流和一个简单的 for 循环。不幸的是,我遇到了编译问题:Local variable a defined in an enclosing scope must be final or effectively final. 这是否意味着我不能这样做,我应该找到不同的方法?

【问题讨论】:

标签: java compiler-errors java-stream


【解决方案1】:

正如错误所说,lambda 表达式中使用的变量必须是“最终的或有效的最终”,并且a 显然是可变的。一种可能的解决方案是创建一个虚拟变量,在循环的每次迭代中都重新定义该变量以获取 a 的值,但不会发生突变:

for (int a = 1; a < 11; a++) {
    int x = a; // Effectively final
    assertTrue(students.stream().filter(i -> i.getGroupID() == x).count() < 30);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-01
    • 2011-11-01
    • 2023-03-29
    • 2015-07-12
    • 2019-02-18
    • 2020-11-27
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多