public static CompositeEvictionChecker newCompositeEvictionChecker(CompositionOperator compositionOperator,
                                                                       EvictionChecker... evictionCheckers) {
        Preconditions.isNotNull(compositionOperator, "composition");
        Preconditions.isNotNull(evictionCheckers, "evictionCheckers");
        if (evictionCheckers.length == 0) {
            throw new IllegalArgumentException("EvictionCheckers cannot be empty!");
        }
        switch (compositionOperator) {
            case AND:
                return new CompositeEvictionCheckerWithAndComposition(evictionCheckers);
            case OR:
                return new CompositeEvictionCheckerWithOrComposition(evictionCheckers);
            default:
                throw new IllegalArgumentException("Invalid composition operator: " + compositionOperator);
        }
    }
@Test
    public void resultShouldReturnTrue_whenAllIsTrue_withOrCompositionOperator() {
        EvictionChecker evictionChecker1ReturnsTrue = mock(EvictionChecker.class);
        EvictionChecker evictionChecker2ReturnsTrue = mock(EvictionChecker.class);

        when(evictionChecker1ReturnsTrue.isEvictionRequired()).thenReturn(true);
        when(evictionChecker2ReturnsTrue.isEvictionRequired()).thenReturn(true);

        CompositeEvictionChecker compositeEvictionChecker =
                CompositeEvictionChecker.newCompositeEvictionChecker(
                        CompositeEvictionChecker.CompositionOperator.OR, evictionChecker1ReturnsTrue,
                        evictionChecker2ReturnsTrue);

        assertTrue(compositeEvictionChecker.isEvictionRequired());
    }