Java 测试番石榴供应商的最佳方法

Java 测试番石榴供应商的最佳方法,java,guava,Java,Guava,如果我将Supplier与Suppliers::memoize(供应商代表)一起使用,那么最好的测试方法是什么 例如,假设我有以下内容: private static final Supplier<String> ENVIRONMENT_SUPPLIER = Suppliers.memoize(new Supplier<String>() { @Override public String get() { String value = ""

如果我将
Supplier
Suppliers::memoize(供应商代表)
一起使用,那么最好的测试方法是什么

例如,假设我有以下内容:

private static final Supplier<String> ENVIRONMENT_SUPPLIER = Suppliers.memoize(new Supplier<String>() {
    @Override
    public String get() {
        String value = "";// actually something time consuming
        return value;
    }
});
私有静态最终供应商环境\u Supplier=Suppliers.memoize(新供应商(){
@凌驾
公共字符串get(){
String value=“;//实际上是一些耗时的事情
返回值;
}
});
对我来说,最明显的方法似乎是将供应商抽取到自己的(内部)类中并进行测试。出于某种原因,这对我来说似乎有点难看,当我最终升级到Java 8时,这看起来有点傻。

这里有几个选项

首先,您可以将
ENVIRONMENT\u SUPPLIER
声明为默认范围。在这种情况下,测试(应该在同一个包中)可以访问它并对其进行测试


第二,也许更好,如果它是一个复杂的类,需要花费大量的时间,那么将它划分为自己的类将是一个好主意。这不仅允许访问测试,还允许您在测试包装类时使用模拟。因为它已经实现了一个接口(
供应商
),所以很容易实现。

感谢您的反馈,实际上,我在原始问题上犯了一个小错误,
ENVIRONMENT\u SUPPLIER
实际上已经是包私有的,并用
@VisibleForTesting
进行了注释,表示它只是以这种方式定义的,用于测试。我真的很想知道是否有更好的方法来测试
Supplier
中的业务逻辑,而不是将其提取到另一个类中,但我想没有。谢谢我不明白为什么需要将它提取到另一个类。如果您的问题是结果是
memonized
这一事实,那么将
供应商的非memonized实例声明为其自己的字段并进行测试。通过将其提取到自己的类中,这就是我的意思。因此,作为一个参考,通过将其设置为字段,您可以对其进行测试,但不能对其进行模拟。我让它成为自己的类(不是匿名的内部类)并注入它,你可以让他们模仿它,这会很好,因为它做了一些耗时的事情。