关于java:在另一个类中访问内部枚举以进行测试

Accessing inner enum in another class for testing

如何访问另一个类中的内部枚举类? 例如:

1
2
3
4
5
6
7
public class Foo {
    enum Bar {
        ONE, TWO, FOUR, EIGHT, SIXTEEN
    }

    // ...methods here
}

我正在尝试访问Foo.Bar的类:

1
2
3
4
5
6
7
8
9
10
11
12
public class FooTest {
    private Foo f;

    @Before
    public void setUp() throws Exception {
        f = new Foo();
    }

    public void testCase1() {
        assertEquals(Bar.ONE, f.climbUp());
    }
}

我已经尝试了Foo.Bar.ONEBar.ONE以及使用Foo.class.getDeclaredField("Bar")创建一个新变量,但这些似乎都不起作用。 getDeclaredClasses()似乎让我$Bar,但我无法从那里访问任何内容。

更新:我不允许修改类Foo


如果目标是测试它,但将枚举保留在默认的可访问性(package-private)中,这是由于您无法编辑Foo和另一个类的标题所暗示的,那么通常的方法是进行测试 在同一个包中。 这意味着它可以访问具有default可见性的项目(请参阅此处)。

考试:

1
2
3
4
5
6
7
package com.scratch;

public class FooTest {
    public static void main(String[] args) {
        System.out.println(String.valueOf(Foo.Bar.ONE));
    }
}

另一个来源:

1
2
3
4
5
6
7
package com.scratch;

public class Foo {
    enum Bar {
        ONE, TWO;
    }
}

你不需要在这里使用反射。 只需使枚举"静态":

1
2
3
4
5
6
7
public class Foo {
    static enum Bar {
        ONE, TWO, FOUR, EIGHT, SIXTEEN
    }

    // ...methods here
}

然后你可以通过Foo.Bar.ONE访问它