static void populateOutputFields(final PMML4Result toUpdate,
                                     final ProcessingDTO processingDTO) {
        logger.debug("populateOutputFields {} {}", toUpdate, processingDTO);
        for (KiePMMLOutputField outputField : processingDTO.getOutputFields()) {
            Object variableValue = outputField.evaluate(processingDTO);
            if (variableValue != null) {
                String variableName = outputField.getName();
                toUpdate.addResultVariable(variableName, variableValue);
                processingDTO.addKiePMMLNameValue(new KiePMMLNameValue(variableName, variableValue));
            }
        }
    }
@Test
    void populateTransformedOutputFieldWithApplyDefineFunctionFromFieldRef() {
        // <DerivedField name="CUSTOM_REF_FIELD" optype="continuous" dataType="double">
        //        <Constant>100.0</Constant>
        // </DerivedField>
        final KiePMMLConstant kiePMMLConstant1 = new KiePMMLConstant(PARAM_1, Collections.emptyList(), value1, null);
        final KiePMMLDerivedField derivedField = KiePMMLDerivedField.builder(CUSTOM_REF_FIELD, Collections
                        .emptyList(),
                DATA_TYPE.DOUBLE,
                OP_TYPE.CONTINUOUS,
                kiePMMLConstant1).build();
        // <DefineFunction name="CUSTOM_FUNCTION" optype="continuous" dataType="double">
        //     <FieldRef>CUSTOM_REF_FIELD</FieldRef>
        // </DefineFunction>
        final KiePMMLFieldRef kiePMMLFieldRef1 = new KiePMMLFieldRef(CUSTOM_REF_FIELD, Collections.emptyList(), null);
        final KiePMMLDefineFunction defineFunction = new KiePMMLDefineFunction(CUSTOM_FUNCTION, Collections
                        .emptyList(),
                DATA_TYPE.DOUBLE,
                OP_TYPE.CONTINUOUS,
                Collections.emptyList(),
                kiePMMLFieldRef1);
        //     <Apply function="CUSTOM_FUNCTION">
        //        <Constant>5.0</Constant>
        //      </Apply>
        final KiePMMLConstant kiePMMLConstant2 = new KiePMMLConstant(PARAM_2, Collections.emptyList(), value2, null);
        KiePMMLApply kiePMMLApply = KiePMMLApply.builder("NAME", Collections.emptyList(), CUSTOM_FUNCTION)
                .withKiePMMLExpressions(Collections.singletonList(kiePMMLConstant2))
                .build();

        KiePMMLOutputField outputField = KiePMMLOutputField.builder(OUTPUT_NAME, Collections.emptyList())
                .withResultFeature(RESULT_FEATURE.TRANSFORMED_VALUE)
                .withKiePMMLExpression(kiePMMLApply)
                .build();

        // From TransformationDictionary
        KiePMMLTransformationDictionary transformationDictionary = KiePMMLTransformationDictionary.builder(
                "transformationDictionary", Collections.emptyList())
                .withDefineFunctions(Collections.singletonList(defineFunction))
                .withDerivedFields(Collections.singletonList(derivedField))
                .build();
        KiePMMLTestingModel kiePMMLModel = testingModelBuilder(outputField)
                .withKiePMMLTransformationDictionary(transformationDictionary)
                .build();
        ProcessingDTO processingDTO = buildProcessingDTOWithEmptyNameValues(kiePMMLModel);
        PMML4Result toUpdate = new PMML4Result();

        PostProcess.populateOutputFields(toUpdate, processingDTO);

        assertThat(toUpdate.getResultVariables()).isNotEmpty();
        assertThat(toUpdate.getResultVariables()).containsKey(OUTPUT_NAME);
        assertThat(toUpdate.getResultVariables().get(OUTPUT_NAME)).isEqualTo(value1);
    }