Comment puis-je simuler un exemple d'une enum class avec PowerMock & Mockito?

J'ai essayé de suivre l'exemple proposé dans la réponse à cette question très semblable, mais il ne fonctionne pas pour moi. Je reçois le message d'erreur suivant:

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)

J'ai besoin d'un simple simulacre d'instance d'un enum class. Je n'ai pas besoin de se moquer l'un de ses méthodes.

Ici, c'est la classe que je veux pour se moquer:

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;
    }
}

J'ai le texte suivant TestNG de l'installation:

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);
    }
}
Énumérer les classes sont finales des classes de sorte que vous ne pouvez pas se moquer d'eux. Peut-être créer un plus haut niveau de l'interface que votre Enum peut mettre en œuvre, puis se moquer de qui?
Il y a beaucoup de liens disant que PowerMock peut le faire: groups.google.com/forum/#!topic/powermock/hqrJaMi0Zrc, code.google.com/p/powermock/source/browse/trunk/modules/...,
Ce deuxième lien ressemble un exemple, est-il quelque chose qui ne fonctionne pas lorsque vous essayez?
Pourquoi avez-vous besoin de faire cela? Je ne peux pas penser à une situation où vous auriez besoin de se moquer d'une énumération.
énumérer les classes peuvent avoir des méthodes définies que vous souhaitez peut-être les séparer de votre classe de test.

OriginalL'auteur Selena | 2015-05-08