Alle Regelobjekte einer Sitzung vor der Ausführung von Berechnungen mit getValue erstellen

In Regelwerktests kann jede beliebige Anzahl von Regelobjekten in einer CER-Sitzung definiert werden, bevor mit der Überprüfung einer beliebigen Anzahl von berechneten Werten für diese Regelobjekte fortgefahren wird.

Sobald Berechnungen gestartet wurden, verhindert jedoch die Strategie RecalculationsProhibited, dass Regelobjekte erstellt werden, die den Wert einer vorherigen Berechnung mit dem Ausdruck "readall" (siehe readall) ungültig machen.

Sie sollten Ihre Tests so strukturieren, dass die Erstellung aller Testregelobjekte vor den Berechnungen (also vor jeder Ausführung einer Methode getValue) stattfindet. In der Praxis stellt dies keine übermäßige Einschränkung dar.

Falls Ihr Test versucht, in einer Sitzung ein neues Regelobjekt zu erstellen, nachdem eine Berechnung stattgefunden hat, löst (falls zuvor ausgeführte Berechnungen mit readall betroffen sind), die Strategie RecalculationsProhibited einen Laufzeitfehler aus:

public void newObjectsAddedAfterCalculationsStarted() {

    final FlexibleRetirementYear flexibleRetirementYear =
        FlexibleRetirementYear_Factory.getFactory().newInstance(
            session);

    flexibleRetirementYear.retirementCause().specifyValue(
        "Reached statutory retirement age.");

    /**
     * Calculate the age at retirement and test its value
     */
    CREOLETestHelper.assertEquals(65, flexibleRetirementYear
        .ageAtRetirement().getValue());

    /**
     * Create another rule object.
     */

    /**
     * May not work - new rule objects added to the session once
     * calculations have started could invalidate earlier
     * <code><readall></code> calculations.
     *
     * {@linkplain RecalculationsProhibited} may report the
     * message: "Cannot create new rule objects for this session,
     * because this session has already accepted a calculation
     * request."
     *
     * To avoid this problem, create all your rule objects before
     * attempting any calculations!
     */
    final FlexibleRetirementYear flexibleRetirementYear2 =
        FlexibleRetirementYear_Factory.getFactory().newInstance(
            session);

  }
Achtung: Falls Ihr Regelwerk gegenwärtig keine Ausdrücke readall enthält, können Sie möglicherweise auf eine Umstrukturierung Ihrer Tests verzichten, damit alle Regelobjekte vor der Ausführung von Bechnungen erstellt werden.

Ändern Sie später Ihren Test jedoch so, dass er Ausdrücke readall enthält, müssen Sie ihn ab diesem Zeitpunkt umstrukturieren.

Strukturieren Sie zur Vermeidung von Nachbesserungen Ihre Tests immer so, dass alle Regelobjekterstellungen vor dem Beginn von Berechnungen ausgeführt werden.