2017-05-10 5 views
-1

Ich verwende Robolectric 3.3.2 und PowerMock, um eine letzte Klasse zu testen.PowerMock konnte die letzte Klasse nicht initialisieren

@RunWith(RobolectricTestRunner.class) 
@Config(sdk = 23) 
@PrepareForTest({ FinalClass.class}) 
public class FragmentTest { 

    private TestFragment mFragment; 
    private TestActivity mActivity; 

    private FinalClass mFinalClassMock; 

    @Before 
    public void setUp() throws Exception{ 

     mFinalClassMock = PowerMockito.mock(FinalClass.class); 
     PowerMockito.whenNew(FinalClass.class).withAnyArguments() 
        .thenReturn(mFinalClassMock); 
     mActivity = Robolectric.buildActivity(TestActivity.class) 
          .create().start().resume().get(); 
     mFragment = new TestFragment(); 

    } 
} 

ist mit Ausnahme unten fehlgeschlagen.

java.lang.IllegalArgumentException: Kann nicht final class Klasse com.android.contacts.common.preference.ContactsPreferences Unterklasse bei org.mockito.cglib.proxy.Enhancer.generateClass (Enhancer.java:447) bei org.mockito.cglib.core.DefaultGeneratorStrategy.generate (DefaultGeneratorStrategy.java:25) bei org.mockito.cglib.core.AbstractClassGenerator.create (AbstractClassGenerator.java:217) bei org.mockito.cglib.proxy.Enhancer. createHelper (Enhancer.java:378) bei org.mockito.cglib.proxy.Enhancer.createClass (Enhancer.java:318) bei org.powermock.api.mockito.repackaged.ClassImposterizer.createProxyClass (ClassImposterizer.java:123) bei org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise (ClassImposterizer.java:57) bei org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl (MockCreator.java:111) bei org. powermock.api.mockito.internal.mockcreation.MockCreator.mock (MockCreator.java:59) bei org.powermock.api.mockito.PowerMockito.mock (PowerMockito.java:143)

ich bin mit JUNIT 4.12 und Powerlock 1.6.4. Geänderte Versionen von Junit und Powermock wie in einem anderen Post vorgeschlagen, aber kein Erfolg. Wer war in letzter Zeit mit diesem Problem konfrontiert?

+0

Ich kann es nicht geben, eine endgültige Antwort zu beheben. Allerdings glaube ich, dass Sie die Annotation '@ RunWith' oder' @ PrepareForTest' entweder vergessen haben. –

+0

Ich habe @RunWith (RobolectricTestRunner.class) und @PrepareForTest ({FinalClass.java}). Tut mir leid, dass ich den Code nicht in der aktuellen Form ohne viele Namensänderungen veröffentlichen kann. – jsam

+0

Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: Erstellen eines [mcve] – GhostCat

Antwort

0

eine Regel in der Klasse Hinzufügen scheint ohne zu sehen, den gesamten Code die Ausgabe

@Rule 
public PowerMockRule rule = new PowerMockRule(); 
Verwandte Themen