访问另一个类中的内部枚举以进行测试

时间:2014-06-30 19:42:35

标签: java unit-testing enums

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

public class Foo {
    enum Bar {
        ONE, TWO, FOUR, EIGHT, SIXTEEN
    }

    // ...methods here
}

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

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

2 个答案:

答案 0 :(得分:1)

如果目标是对其进行测试,但将枚举保留为默认辅助功能(package-private),这是由于您无法编辑Foo和其他类的标题所暗示的,那么常见的方法是在同一个包中进行测试。这意味着它可以使用default可见性(see here)访问项目。

测试:

package com.scratch;

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

另一个来源:

package com.scratch;

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

答案 1 :(得分:0)

您不需要在这里使用反射。只需使枚举“静止”:

public class Foo {
    static enum Bar {
        ONE, TWO, FOUR, EIGHT, SIXTEEN
    }

    // ...methods here
}

然后你可以通过Foo.Bar.ONE

访问它