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.
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
Vous devez vous connecter pour publier un commentaire.
Vous devez exécuter ce avec PowerMockRunner
par exemple.
Mockito ne peut plus se moquer/spy parce que : - classe finale
OriginalL'auteur steves165
J'ai eu ce travail par l'extension de la PowerMockTestCase classe qui gère ce genre de chose pour TestNG:
OriginalL'auteur Selena