Тестирование, возвращает ли лямбда-фабрика правильный результат

#java #lambda

#java #лямбда

Вопрос:

Я пишу тестовый пример для заводского класса. Фабрика (скорее шаблон прототипа) возвращает типы сопоставителей в соответствии с заводскими параметрами. Возвращаемые сопоставления являются ссылками на статические методы.

В ходе теста я обнаружил, что не могу сравнить результирующие ссылки на методы, потому что не могу получить доступ к изначально созданному методу. Поскольку контекст :: оператора решает, будет ли ссылка на метод воссоздана или использована повторно, я сохранил ссылки на методы static finals . Теперь тест будет сравнивать результат со статикой:

     assertEquals(MatcherFactory.MATCH_A, matcherFactory.createMatcher(conditionA))
 

Что я в основном делаю, так это сохраняю ссылки на классы-оболочки лямбд. Я считаю этот подход допустимым. Есть ли в этом что-то не так? Есть ли скрытая ловушка? Конечно, сопоставители потокобезопасны.

Пример кода:

 public class MatcherFactory {

    public static final MyMatcher MATCH_FALSE = MatcherFactory::matchFalse;
    public static final MyMatcher MATCH_A = MatcherFactory::matchA;
    public static final MyMatcher MATCH_B = MatcherFactory::matchB;
    public static final MyMatcher MATCH_AB = MatcherFactory::matchAB;

    public MyMatcher getMatcherFor(Condition condition) {

        switch (condition) {
        case A:
            return MATCH_A;
        case B:
            return MATCH_B;
        case AB:
            return MATCH_AB;
        }

        return MATCH_FALSE;
    }

    public static boolean matchA(Object ... operators) {
    // match magic
    }

    public static boolean matchB(Object ... operators) {
    // match magic
    }

    public static boolean matchAB(Object ... operators) {
    // match magic
    }

    public static boolean matchFalse(Object ... operators) {
        return false;
    }
}