public ExpressionEvaluator getOrCreate(FactMappingValue factMappingValue) {
        if (Type.DMN.equals(type)) {
            return getOrCreateDMNExpressionEvaluator();
        }

        String rawValue = (String) factMappingValue.getRawValue();

        if (isAnMVELExpression(rawValue)) {
            return getOrCreateMVELExpressionEvaluator();
        } else {
            return getOrCreateBaseExpressionEvaluator();
        }
    }
@Test
    public void getOrCreate() {
        FactMappingValue simpleFMV = new FactMappingValue(FactIdentifier.INDEX, ExpressionIdentifier.INDEX, "10");
        FactMappingValue objectFMV = new FactMappingValue(FactIdentifier.INDEX, ExpressionIdentifier.INDEX, "10");
        FactMappingValue mvelFMV = new FactMappingValue(FactIdentifier.INDEX, ExpressionIdentifier.INDEX, MVEL_ESCAPE_SYMBOL + " 10");
        FactMappingValue mvelWithSpacesFMV = new FactMappingValue(FactIdentifier.INDEX, ExpressionIdentifier.INDEX, "     " + MVEL_ESCAPE_SYMBOL + " 10");
        FactMappingValue mvelCollectionExpressionFMV = new FactMappingValue(FactIdentifier.INDEX, ExpressionIdentifier.INDEX, new TextNode(MVEL_ESCAPE_SYMBOL + " 10").textValue());
        FactMappingValue mvelCollectionExpressionWithSpacesFMV = new FactMappingValue(FactIdentifier.INDEX, ExpressionIdentifier.INDEX, new TextNode("     " + MVEL_ESCAPE_SYMBOL + " 10").textValue());
        FactMappingValue mvelCollectionExpressionWitoutMVELEscapeSymbolFMV = new FactMappingValue(FactIdentifier.INDEX, ExpressionIdentifier.INDEX, new TextNode(" 10").textValue());

        ExpressionEvaluatorFactory ruleEvaluatorFactory = ExpressionEvaluatorFactory.create(classLoader, ScenarioSimulationModel.Type.RULE);
        ExpressionEvaluatorFactory dmnEvaluatorFactory = ExpressionEvaluatorFactory.create(classLoader, ScenarioSimulationModel.Type.DMN);

        assertThat(ruleEvaluatorFactory.getOrCreate(simpleFMV)).isInstanceOf(BaseExpressionEvaluator.class);
        assertThat(ruleEvaluatorFactory.getOrCreate(objectFMV)).isInstanceOf(BaseExpressionEvaluator.class);
        assertThat(ruleEvaluatorFactory.getOrCreate(mvelFMV)).isInstanceOf(MVELExpressionEvaluator.class);
        assertThat(ruleEvaluatorFactory.getOrCreate(mvelWithSpacesFMV)).isInstanceOf(MVELExpressionEvaluator.class);
        assertThat(ruleEvaluatorFactory.getOrCreate(mvelCollectionExpressionFMV)).isInstanceOf(MVELExpressionEvaluator.class);
        assertThat(ruleEvaluatorFactory.getOrCreate(mvelCollectionExpressionWithSpacesFMV)).isInstanceOf(MVELExpressionEvaluator.class);
        assertThat(ruleEvaluatorFactory.getOrCreate(mvelCollectionExpressionWitoutMVELEscapeSymbolFMV)).isInstanceOf(BaseExpressionEvaluator.class);

        assertThat(dmnEvaluatorFactory.getOrCreate(simpleFMV)).isInstanceOf(DMNFeelExpressionEvaluator.class);
        assertThat(dmnEvaluatorFactory.getOrCreate(objectFMV)).isInstanceOf(DMNFeelExpressionEvaluator.class);
        assertThat(dmnEvaluatorFactory.getOrCreate(mvelFMV)).isInstanceOf(DMNFeelExpressionEvaluator.class);
        assertThat(dmnEvaluatorFactory.getOrCreate(mvelWithSpacesFMV)).isInstanceOf(DMNFeelExpressionEvaluator.class);
        assertThat(dmnEvaluatorFactory.getOrCreate(mvelCollectionExpressionFMV)).isInstanceOf(DMNFeelExpressionEvaluator.class);
        assertThat(dmnEvaluatorFactory.getOrCreate(mvelCollectionExpressionWithSpacesFMV)).isInstanceOf(DMNFeelExpressionEvaluator.class);
        assertThat(dmnEvaluatorFactory.getOrCreate(mvelCollectionExpressionWitoutMVELEscapeSymbolFMV)).isInstanceOf(DMNFeelExpressionEvaluator.class);
    }