Fehler beim initialisieren der mockito, jederzeit und für alle Testfälle
Ziemlich viel, verbrachte den ganzen Tag kämpfen. Es spielt keine Rolle, welche Art von tests/Klasse/interface ich benutze, ich bekomme ziemlich viel die gleiche Ausnahme. Hier ist die stackerror:
java.lang.AbstractMethodError: org.powermock.api.mockito.internal.mockmaker.PowerMockMaker.isTypeMockable(Ljava/lang/Class;)Lorg/mockito/plugins/MockMaker$TypeMockability;
at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:26)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:21)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:167)
at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:161)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:58)
at org.mockito.Mockito.mock(Mockito.java:1410)
at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:33)
at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:16)
at org.mockito.internal.configuration.DefaultAnnotationEngine.createMockFor(DefaultAnnotationEngine.java:43)
at org.mockito.internal.configuration.DefaultAnnotationEngine.process(DefaultAnnotationEngine.java:66)
at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:71)
at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:55)
at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:108)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl$1.withBefores(JUnit45AndHigherRunnerImpl.java:27)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:246)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:49)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:69)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:105)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Infact, ich weiß nicht und verstehe auch nicht, warum der powermock-Bibliothek beteiligt ist. Ist es nicht kompiliert, als ich versuchte, zu verspotten einige final-Klassen, aber das war vor Stunden!
Hier ist eine tatsächliche Satz von Dateien, die ich versuche zu nutzen:
public class ClassA {
private String message;
public String getMessage(){
message="classA";
return message;
}
}
public class ClassB {
private ClassA myClass;
public ClassB(ClassA aClass){
this.myClass=aClass;
}
public ClassA getClassA(){
return myClass;
}
}
und die Test-Klasse:
package com.icidigital.services
import com.icidigital.users.ClassA
import com.icidigital.users.ClassB
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.runners.MockitoJUnitRunner
/**
* Created by apil.tamang on 7/28/15.
*/
@RunWith(MockitoJUnitRunner.class)
class TestSimplestMock {
ClassB classB;
@Mock
ClassA mockA;
@Before
public void setup(){
classB=new ClassB(mockA);
Mockito.when(classB.getClassA()).thenReturn(null);
}
@Test
public void testA(){
ClassA obj=classB.getClassA();
assert(obj==null);
}
}
- Habe Sie umgebaut das Projekt? Wie in der, vollständig dem Erdboden gleichgemacht, Ihre class-Dateien und versucht, wieder zu rekonstruieren?
- Ich habe ein paar mal. Anyways, dieses mal, gleich nachdem ich gepostet diese Frage, die ich entfernt testCompile für die powermockito Bibliothek, baute die Konfiguration Aneinanderfügen, dann zu bauen, und es funktioniert... außer ich bekomme eine andere kryptische Fehlermeldung.. Mockito beschwert sich ein MissingMethoException für 'getClassA()' obwohl es eigentlich definiert ist, für die ClassB. Irgendwelche Gedanken?
- Ich glaube nicht, dass es genug Informationen in Ihrem follow-up-Kommentar zu gehen. Ich würde die post eine eigene Frage mit voller verfolgen und zu verlinken.
- Ich entfernte die Abhängigkeit für power-mockito aus meinem pom und alles funktionierte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, für third-party-plugins zum registrieren von benutzerdefinierten
MockMaker
- Implementierungen, erstellen von Klassen anders als die Standard-Verhalten über Mockito ist SPI. Als ein Teil der angegebenen Verhalten, da Mockito 2.0, einMockMaker
entscheiden können, wenn eine Klasse mockable, wiefinal
Klassen im Falle von PowerMock. Um Sie zu integrieren wie ein angepasstes Verhalten, PowerMock registriert eine benutzerdefinierteMockMaker
an, die dann durch Mockito.In Mockito 2.0, die API für benutzerdefinierte
MockMaker
musste verlängert werden, aberPowerMock
noch nicht in der Anpassung der API-Erweiterungen. Daher ist diese neue Methode ist noch nicht implementiert, durch die PowerMockMockMaker
welche Ergebnisse in einemAbstractMethodError
.Lief ich in den gleichen Fehler. Bei mir hat es geholfen zu gehören
statt Mockitos
mock()
undspy()
Methoden.@Mock
der gleiche geblieben ist.Nicht sicher, ob das ist, was Sie zu tun versuchen. Aber wenn Sie versuchen, zu null zurück, wenn getClassA genannt wird, dann sollten Sie ein mock-Objekt vom Typ ClassB! (da getClassA ist eine Methode der Klasse).
Die richtige Antwort gegeben wurde, indem Raphael Winterhalter. Aber derzeit PowerMockito team ist auf die Unterstützung von Mockito2+
Die aktuelle stabile version ist derzeit RC4
Es kompiliert, aber es gibt immer noch eine Menge Fragen
Hier ist die Wiki-Seite über Mockito 2-Unterstützung
https://github.com/powermock/powermock/wiki/Mockito-2-(Maven)
Ich hatte das gleiche Problem bei der Arbeit mit mockito-core:jar:2.18.3 und powermock-api-mockito:1.6.3.
Es funktionierte für mich, wenn ich herabgestuft mockito-core:jar:2.0.5-beta.