- 枚举中的每个常量都是一个静态的最终嵌套类。因此,要模拟它,您必须在PrepareForTest中指向嵌套类。
MyEnum.values()
返回预初始化的数组,因此在您的情况下也应进行模拟。- 每个枚举常量都只是一个
public final static
字段。
全部一起:
@RunWith(PowerMockRunner.class)@PrepareForTest(value = MyEnum.class,fullyQualifiedNames = { "com.stackoverflow.q45414070.MyEnum$1", "com.stackoverflow.q45414070.MyEnum$2"})public class MyTestClass { @Test public void should_return_sum_of_stubs() throws Exception { final MyEnum one = mock(MyEnum.ONE.getClass()); final MyEnum two = mock(MyEnum.TWO.getClass()); mockStatic(MyEnum.class); when(MyEnum.values()).thenReturn(new MyEnum[]{one, two}); when(one.myMethod()).thenReturn(10); when(two.myMethod()).thenReturn(20); assertThat(new Consumer().consumer()) .isEqualTo(30); } @Test public void should_return_stubs() { final MyEnum one = mock(MyEnum.ONE.getClass()); when(one.myMethod()).thenReturn(10); Whitebox.setInternalState(MyEnum.class, "ONE", one); assertThat(MyEnum.ONE.myMethod()).isEqualTo(10); }}完整的例子



