第12章 無効なスコアの検出

environmentMode クラスを使用し、値を FULL_ASSERT または FAST_ASSERT として指定すると、環境モードはインクリメント演算子によるスコア計算でスコアの破損を検出します。

ただし、これを行うと、スコア計算ツールがビジネスが望む方法でスコア制約を実装しているかどうかは検証されません。たとえば、1 つの制約が常に間違ったパターンに一致する可能性があります。独立した実装に対して制約を検証するには、assertionScoreDirectorFactory クラスを設定します。

  <environmentMode>FAST_ASSERT</environmentMode>
  ...
  <scoreDirectorFactory>
    <constraintProviderClass>org.optaplanner.examples.nqueens.optional.score.NQueensConstraintProvider</constraintProviderClass>
    <assertionScoreDirectorFactory>
      <easyScoreCalculatorClass>org.optaplanner.examples.nqueens.optional.score.NQueensEasyScoreCalculator</easyScoreCalculatorClass>
    </assertionScoreDirectorFactory>
  </scoreDirectorFactory>

この例では、NQueensConstraintProvider 実装が EasyScoreCalculator によって検証されます。

注記

この手法はスコアの破損を分離するのに効果的ですが、制約が実際のビジネスニーズを実装していることを検証するには、通常、ConstraintVerifier を使用した単体テストの方が優れています。