如何使用PowerMock和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 class。我不需要模拟任何方法。

这是我要模拟的课程:

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;

}

}

我有以下TestNG设置:

import static org.powermock.api.mockito.PowerMockito.mock;

@PrepareForTest({ ExampleEnumerable.class})

@Test(groups = {"LoadableBuilderTestGroup"})

public class LoadableBuilderTest {

private ExampleEnumerable mockEnumerable;

@BeforeMethod

public void setUp() {

mockEnumerable = mock(ExampleEnumerable.class);

}

}

回答:

我通过扩展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);

}

}

以上是 如何使用PowerMock和Mockito模拟枚举类的实例? 的全部内容, 来源链接: utcz.com/qa/427092.html

回到顶部