Wie kann ich verspotte eine Instanz einer enum-Klasse mit PowerMock & Mockito?
Versuchte ich zu Folgen, das Beispiel in der Antwort auf diese sehr ähnliche Frage, aber es funktioniert nicht für mich. Ich bekomme folgende Fehlermeldung:
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)
Ich brauche eine einfache mock-Instanz eine enum class
. Ich brauche nicht zu spotten jeder seine Methoden.
Hier ist die Klasse, ich möchte mock:
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;
}
}
Habe ich Folgendes TestNG setup:
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);
}
}
Enum-Klassen sind die letzten Klassen, also können Sie nicht verspotten. Vielleicht erstellen Sie einen höheren level interface, dass Sie Ihre Enum implementieren kann, und Sie dann zu verspotten?
Es gibt viele links, die sagen, dass PowerMock kann es tun: groups.google.com/forum/#!Thema/powermock/hqrJaMi0Zrc, code.google.com/p/powermock/source/browse/trunk/modules/...,
Dass der zweite link sieht aus wie ein Beispiel, gibt es etwas, das nicht funktioniert, wenn Sie es versuchen?
Warum brauchen Sie, um dies zu tun? Ich kann nicht denken Sie an eine situation, wo Sie brauchen würde, um ein mock-enumeration.
enum-Klassen können Methoden definiert werden, möchten Sie vielleicht, Sie zu trennen out von Ihre Klasse unter test.
Es gibt viele links, die sagen, dass PowerMock kann es tun: groups.google.com/forum/#!Thema/powermock/hqrJaMi0Zrc, code.google.com/p/powermock/source/browse/trunk/modules/...,
Dass der zweite link sieht aus wie ein Beispiel, gibt es etwas, das nicht funktioniert, wenn Sie es versuchen?
Warum brauchen Sie, um dies zu tun? Ich kann nicht denken Sie an eine situation, wo Sie brauchen würde, um ein mock-enumeration.
enum-Klassen können Methoden definiert werden, möchten Sie vielleicht, Sie zu trennen out von Ihre Klasse unter test.
InformationsquelleAutor Selena | 2015-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zum ausführen dieses mit PowerMockRunner
zB.
Mockito nicht verspotten/spy weil : - Finale Klasse
InformationsquelleAutor steves165
Habe ich diese Arbeit durch die Erweiterung der PowerMockTestCase Klasse behandelt, diese Art der Sache für TestNG:
InformationsquelleAutor Selena