Crear todos los objetos de regla para una sesión antes de ejecutar cálculos getValue

Las pruebas de conjunto de reglas pueden configurar cualquier número de objetos de regla en una sesión CER antes de continuar con la comprobación de cualquier número de valores calculados en esos objetos de regla.

Sin embargo, una vez que se hayan comenzado los cálculos, la estrategia RecalculationsProhibited impide crear objetos de regla que invaliden el valor de un cálculo readall previamente calculado.

Debe estructurar las pruebas de modo que la creación de todos los objetos de regla de prueba se produzca antes de cualquier cálculo (es decir, antes de cualquier ejecución de getValue). En la práctica esto no es excesivamente restrictivo.

Si la prueba intenta crear un objeto de regla nuevo en una sesión después de que se haya producido un cálculo, (si los cálculos readall calculados anteriormente han quedado afectados), la estrategia RecalculationsProhibited generará un error de tiempo de ejecución:

public void newObjectsAddedAfterCalculationsStarted() {

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

    flexibleRetirementYear.retirementCause().specifyValue(
        "Se ha alcanzado la edad de jubilación legal.") ;

    /**
     * Calcular la edad de jubilación y probar su valor
     */
    CREOLETestHelper.assertEquals(65, flexibleRetirementYear
        .ageAtRetirement().getValue());

    /**
     * Crear otro objeto de regla.
     */

    /**
     * Puede que no funcione: los objetos de regla nuevos añadidos a la sesión una vez que
     * se han iniciado los cálculos pueden invalidar los cálculos
     * <code><readall></code> anteriores.
     *
     * {@linkplain RecalculationsProhibited} puede generar el
     * mensaje: "No se pueden crear objetos de regla nuevos para esta sesión,
     * porque esta sesión ya ha aceptado una solicitud
     * de cálculo."
     *
     * Para evitar este problema, cree todos los objetos de regla antes
     * de intentar cualquier cálculo.
     */
    final FlexibleRetirementYear flexibleRetirementYear2 =
        FlexibleRetirementYear_Factory.getFactory().newInstance(
            session);

  }
aviso: Si el conjunto de reglas no contiene actualmente ninguna expresión readall, puede no estructurar las pruebas para que toda la creación de objetos de regla se produzca antes de cualquier cálculo.

Sin embargo, si cambia el conjunto de reglas en el futuro para que contenga expresiones readall, tendrá que reestructurar sus pruebas en ese momento.

Para evitar el reacondicionamiento, estructure siempre las pruebas para que toda la creación de objetos de regla se realice antes de que empiecen los cálculos.