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
}