首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用PowerMock & Mockito模拟枚举类的实例?

如何使用PowerMock & Mockito模拟枚举类的实例?
EN

Stack Overflow用户
提问于 2015-05-08 23:05:22
回答 3查看 26.4K关注 0票数 8

我试图遵循这个非常相似的问题的答案中提供的示例,但它对我不起作用。我得到以下错误消息:

代码语言:javascript
代码运行次数:0
运行
复制
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模拟实例。我不需要模仿它的任何方法。

下面是我想模拟的类:

代码语言:javascript
代码运行次数:0
运行
复制
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设置:

代码语言:javascript
代码运行次数:0
运行
复制
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);
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-12 22:25:47

我通过扩展为TestNG处理这类事情的PowerMockTestCase类实现了这一点:

代码语言:javascript
代码运行次数:0
运行
复制
@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);

    }
}
票数 3
EN

Stack Overflow用户

发布于 2015-05-08 23:42:50

您需要使用PowerMockRunner运行此命令

例如:

代码语言:javascript
代码运行次数:0
运行
复制
@RunWith(PowerMockRunner.class)
@PrepareForTest({ ExampleEnumerable.class})
@Test(groups = {"LoadableBuilderTestGroup"})
public class LoadableBuilderTest {
    private ExampleEnumerable mockEnumerable;

    @BeforeMethod
    public void setUp() {
        mockEnumerable = mock(ExampleEnumerable.class);
    }
}
票数 5
EN

Stack Overflow用户

发布于 2020-11-12 01:32:58

大家好,对我来说是这样的:

首先在pom.xml上添加power模拟:

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>2.0.4</version>
    <scope>test</scope>
</dependency>

,然后是我的类:

代码语言:javascript
代码运行次数:0
运行
复制
@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
    }  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30127057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档