如何正确初始化ConstraintVerifier以测试Kotlin中的Optaplanner ConstraintStreams
如何在不使用Drools和Quarkus的情况下在Kotlin中初始化ConstraintVerifier? 我已经为optaplanner 8.6.0.Final添加了optaplanner测试JAR和Maven依赖项,并尝试了以下方法:如何正确初始化ConstraintVerifier以测试Kotlin中的Optaplanner ConstraintStreams,kotlin,optaplanner,Kotlin,Optaplanner,如何在不使用Drools和Quarkus的情况下在Kotlin中初始化ConstraintVerifier? 我已经为optaplanner 8.6.0.Final添加了optaplanner测试JAR和Maven依赖项,并尝试了以下方法: var constraintVerifier : ConstraintVerifier<GroupAssignmentConstraintProvider, GroupAssignmentSolution> = ConstraintVer
var constraintVerifier : ConstraintVerifier<GroupAssignmentConstraintProvider, GroupAssignmentSolution> =
ConstraintVerifier.build(GroupAssignmentConstraintProvider(),
GroupAssignmentSolution::class.java,
GroupAssignment::class.java)
使用minGroupSize约束:
fun minGroupSize(constraintFactory: ConstraintFactory): Constraint {
return constraintFactory
.from(GroupAssignment::class.java)
.groupBy(GroupAssignment::group, count())
.filter { group, number ->
number < group!!.minsize
}
.penalize("group min Conflict", ofHard(medium))
}
fun minGroupSize(constraintFactory:constraintFactory):约束{
返回约束工厂
.from(GroupAssignment::class.java)
.groupBy(GroupAssignment::group,count())
.filter{组,编号->
数字<组!!.minsize
}
.处罚(“团体最小冲突”,属于中度)
}
告诉我:
(GroupAssignmentTest.kt:65指测试中的.populations()
)
java.lang.AssertionError:期望值被打破
约束:groupAssignment.solver/group min Conflict
分数说明(0硬/0软):
约束匹配总数:
起诉书:
预计会有点球,但没有
位于org.optaplanner.test.impl.score.stream.DefaultSingleConstraintAservation.assertMatch(DefaultSingleConstraintAservation.java:185)
在org.optaplanner.test.impl.score.stream.DefaultSingleConstraintaSertion.punizations上(DefaultSingleConstraintaSertion.java:82)
在org.optaplanner.test.api.score.stream.SingleConstraintAssertion.populations上(SingleConstraintAssertion.java:121)
在GroupAssignmentTest.lessthanMingGroupSize处(GroupAssignmentTest.kt:65)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)
位于org.junit.jupiter.engine.execution.MethodInvocation.procedure(MethodInvocation.java:60)
位于org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.Procedue(InvocationInterceptorChain.java:131)
位于org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
位于org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
位于org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
位于org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
位于org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
位于org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.Procedue(InvocationInterceptorChain.java:106)
在org.junit.jupiter.engine.execution.InvocationInterceptorChain.procedure(InvocationInterceptorChain.java:64)上
位于org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
位于org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
位于org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
位于org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
位于org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:205)
位于org.junit.platform.engine.support.hierarchy.ThrowableCollector.execute(ThrowableCollector.java:73)
位于org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:201)
位于org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:137)
位于org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71)
位于org.junit.platform.engine.support.hierarchy.NodeTestTask.lambda$ExecuteCursive$5(NodeTestTask.java:135)
位于org.junit.platform.engine.support.hierarchy.ThrowableCollector.execute(ThrowableCollector.java:73)
位于org.junit.platform.engine.support.hierarchy.NodeTestTask.lambda$executecurively$7(NodeTestTask.java:125)
位于org.junit.platform.engine.support.hierarchy.Node.around(Node.java:135)
位于org.junit.platform.engine.support.hierarchy.NodeTestTask.lambda$ExecuteCursive$8(NodeTestTask.java:123)
位于org.junit.platform.engine.support.hierarchy.ThrowableCollector.execute(ThrowableCollector.java:73)
在org.junit.platform.engine.support.hierarchy.NodeTestTask.ExecuteCursive上(NodeTestTask.java:122)
位于org.junit.platform.engine.support.hierarchy.NodeTestTask.execute(NodeTestTask.java:80)
除此之外,约束也起作用
我想,我没有以正确的方式初始化或使用ConstraintVerifier。有人能帮我解决这个问题吗?
谢谢大家! 您的测试有几个问题。首先:
.given(students, lecturer, configuration)
given()
调用需要单个实例。您正在为它提供实例集合,特别是一组可变的学生。您的约束不执行(Set.class)或类似的操作,因此它不会看到这些实例。你必须枚举你的学生,或者根本不给他们,因为你的约束对学生类既没有from()
也没有join()
此外,您的约束确实来自(GroupAssignment.class),但在
given()
参数中没有看到GroupAssignment
s。再一次,约束流没有任何起点,因此断言消息是正确的-没有任何惩罚。除了Lukas的回答之外,请查看TimeTableConstraintProviderTest.kt
在感谢您的提示中,我发现了如何纠正它!
.given(students, lecturer, configuration)