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