Java 如何使用PowerMock模拟枚举类的实例&;莫基托?

Java 如何使用PowerMock模拟枚举类的实例&;莫基托?,java,enums,mockito,powermock,powermockito,Java,Enums,Mockito,Powermock,Powermockito,我试着按照这个非常相似的问题的答案中提供的例子,但它对我不起作用。我收到以下错误消息: java.lang.IllegalArgumentException: Cannot subclass final class class com.myproject.test.support.ExampleEnumerable at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:447) at org.mockito

我试着按照这个非常相似的问题的答案中提供的例子,但它对我不起作用。我收到以下错误消息:

java.lang.IllegalArgumentException: Cannot subclass final class class com.myproject.test.support.ExampleEnumerable
    at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:447)
    at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
    at org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
    at org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)
    at org.powermock.api.mockito.repackaged.ClassImposterizer.createProxyClass(ClassImposterizer.java:123)
    at org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise(ClassImposterizer.java:57)
    at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:110)
    at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:58)
    at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:143)
我需要一个
enum类的简单模拟实例
。我不需要嘲笑它的任何方法

下面是我想模拟的课程:

public enum ExampleEnumerable implements IEnumerable<ExampleEnumerable> {
    EXAMPLE_ENUM_1("Test Enum 1"),
    EXAMPLE_ENUM_2("Test Enum 2");

    final String alias;

    ExampleEnumerable(final String alias) {
        this.alias = alias;
    }

    @SuppressWarnings({"VariableArgumentMethod", "unchecked"})
    @Override
    public @Nullable
    String getAlias(final @Nonnull IEnumerable<? extends Enum<?>>... context) {
        return alias;
    }
}

您需要使用PowerMockRunner运行此程序

例如


我通过扩展PowerMockTestCase类来实现这一点,该类为TestNG处理这类事情:

@PrepareForTest(TestEnumerable.class)
@Test(groups = {"LoadableBuilderTestGroup"})
public class LoadableBuilderTest extends PowerMockTestCase {

 private TestEnumerable mockEnumerable;

 @SuppressWarnings("unchecked")
    @BeforeMethod
    public void setUp() {
        mockEnumerable = PowerMockito.mock(TestEnumerable.class);

    }
}
大家好,我的工作如下:

首先在pom.xml上添加power mockito:


枚举类是最终类,因此不能模拟它们。也许创建一个您的枚举可以实现的更高级别的接口,然后对其进行模拟?有很多链接说PowerMock可以做到这一点:,第二个链接看起来像是一个示例,当您尝试它时,是否有一些东西不起作用?为什么需要这样做?我想不出在什么情况下需要模拟枚举。@托比,枚举类可以定义一些方法,您可能希望将这些方法从测试中的类中分离出来。RunWith是junit构造,我使用的是TestNG,它没有该构造。Mockito无法模拟/spy,因为:-final class
@RunWith(PowerMockRunner.class)
@PrepareForTest({ ExampleEnumerable.class})
@Test(groups = {"LoadableBuilderTestGroup"})
public class LoadableBuilderTest {
    private ExampleEnumerable mockEnumerable;

    @BeforeMethod
    public void setUp() {
        mockEnumerable = mock(ExampleEnumerable.class);
    }
}
@PrepareForTest(TestEnumerable.class)
@Test(groups = {"LoadableBuilderTestGroup"})
public class LoadableBuilderTest extends PowerMockTestCase {

 private TestEnumerable mockEnumerable;

 @SuppressWarnings("unchecked")
    @BeforeMethod
    public void setUp() {
        mockEnumerable = PowerMockito.mock(TestEnumerable.class);

    }
}
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>2.0.4</version>
    <scope>test</scope>
</dependency>
@RunWith(PowerMockRunner.class)
@PrepareForTest({EnumClass.class})
public class EnumClassTest{
    private EnumClassTest enumClassTest;
    
    @Before
    public void setUp() {
        enumClassTest = mock(EnumClassTest.class);
    }
    
    @Test
    public void someMethod() {
        //My code test here
    }