ConstraintVerifier 在测试中未使用 ConstraintConfiguration class?

ConstraintConfiguration not used by ConstraintVerifier in testing class?

我目前正在使用 ConstraintConfiguration class 中配置的动态权重。但是 class 在执行我编写的测试时似乎没有被使用。然而,它在实际执行求解器时使用。

例如:配置class中的其中一个权重是16。在测试分数为1时,不会与权重相乘,结果为1。但在实际求解时, 它将使用它并且它将按预期为 16。

我猜我在测试中遗漏了一些东西 class。 是不是要告诉ConstraintVerifier或者测试class中的测试方法有ConstraintConfiguration?还是我漏掉了什么?

提前致谢。

我当前的约束验证器:

ConstraintVerifier<ExamScheduleConstraintProvider, ExamSchedule> constraintVerifier = ConstraintVerifier.build(
            new ExamScheduleConstraintProvider(), ExamSchedule.class, Exam.class);

未通过的测试代码示例:

constraintVerifier.verifyThat(ExamScheduleConstraintProvider::TestConstraint)
                .given(firstExam, secondExam)
                .penalizesBy(16);

ConstraintVerifier提供两种验证方式:

  1. verifyThat(constraintFunction);
  2. verifyThat();

verifyThat(constraintFunction) 接受对单个约束的方法引用,并在给定特定实体和事实或整个解决方案的情况下验证该约束按预期的匹配权重进行惩罚或奖励。重要的是要注意,这个验证器完全忽略了约束权重。

verifyThat() 不接受任何参数并检查 ConstraintProvider 实现中为提供的实体定义的所有约束的分数影响(包括来自 ConstraintConfiguration 的约束权重)和事实或完整的解决方案。

除了 Radovan 的回应之外,我还将提供一些理由来说明 ConstraintVerifier 为何如此运作。

对于个别约束,它不考虑 ConstraintConfiguration。那是因为 ConstraintConfiguration 是解决方案特定的,我们希望能够单独和独立地测试约束。在这种情况下,我们只测试匹配权重;无论解决方案如何,也无论约束配置如何,匹配权重都存在。这将是您的典型单元测试。 (如果您更喜欢另一种思考方式,请考虑以下事实:约束配置是可选的,实际上大多数人不使用它。)

对于集成测试,我们支持测试整个解决方案。当您将所有约束作为一个整体进行测试时,这就是我们将您的 ConstraintConfiguration 考虑在内的地方。