2015-02-12 5 views
-1

Если я использую Supplier в сочетании с Suppliers::memoize(Supplier<T> delegate), что это лучший способ проверить его?Лучший способ проверить поставщика Guava

Например, у меня есть следующий:

private static final Supplier<String> ENVIRONMENT_SUPPLIER = Suppliers.memoize(new Supplier<String>() { 
    @Override 
    public String get() { 
     String value = "";// actually something time consuming 
     return value; 
    } 
}); 

Самые очевидный способ мне кажется, чтобы извлечь Поставщик в свой собственный (внутренний) класс и проверять. По какой-то причине это кажется мне немного уродливым и будет выглядеть немного глупо, когда я, наконец, перейду на Java 8.

ответ

1

Пара вариантов здесь.

Во-первых, вы можете объявить ENVIRONMENT_SUPPLIER как область по умолчанию. В этом случае тест (который должен находиться в одном пакете) будет иметь доступ к нему и может его проверить.

Во-вторых, и, вероятно, лучше, если это сложный класс, который требует много времени, было бы неплохо разбить его на свой класс. Это не только разрешает доступ для тестирования, но также позволяет использовать макет при тестировании класса упаковки. Поскольку он уже реализует интерфейс (Supplier), это было бы очень легко сделать.

+0

Благодарим за отзыв. Я действительно сделал небольшую ошибку с исходным вопросом, а '' 'ENVIRONMENT_SUPPLIER''' на самом деле уже является закрытым пакетом и аннотируется с помощью' '' @ VisibleForTesting'', чтобы обозначить, что он определен только таким образом для тестирование. Я действительно хотел знать, было ли лучше проверить бизнес-логику в '' '' 'Поставщике'', а не выдать его другому классу, но я думаю, что нет. спасибо! –

+0

Я не понимаю, почему вам нужно извлечь его в другой класс. Если ваша проблема заключается в том, что результат «memoized» объявляет не memoized экземпляр «Поставщика» в качестве собственного поля и проверяет это. –

+0

Извлекая его на свой собственный класс, это то, что я имел в виду. –