2012-07-03 15 views
6

Sto cercando di utilizzare PowerMock per deridere alcune classi utilizzate nel testare la nostra app Android (BluetoothSocket per esempio).VerifyError con PowerMock su Android

Ho scaricato il file zip sulla pagina di codice google di PowerMock con tutte le dipendenze e le ho aggiunte al mio progetto di test Android (incluso il percorso di compilazione).

Tuttavia quando provo ad usare PowerMock come questo:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(NetworkUtil.class) 
public class TestSendAck extends TestCase{ 

    @Test 
    public void testGenerateURL() { 
     PowerMock.mockStatic(NetworkUtil.class); 

     EasyMock.expect(NetworkUtil.getLocalHostname()).andReturn("triumph"); 

     PowerMock.replayAll(); 
     PowerMock.verifyAll(); 
    } 
} 

ottengo il seguente stack trace:

java.lang.ExceptionInInitializerError 
at org.easymock.internal.ClassProxyFactory.createEnhancer(ClassProxyFactory.java:249) 
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:159) 
at org.easymock.internal.MocksControl.createMock(MocksControl.java:59) 
at org.powermock.api.easymock.PowerMock.doCreateMock(PowerMock.java:2212) 
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2163) 
at org.powermock.api.easymock.PowerMock.mockStatic(PowerMock.java:287) 
at se.metrima.mafield.test.TestSendAck.testGenerateURL(TestSendAck.java:19) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448) 
Caused by: java.lang.VerifyError: net.sf.cglib.core.ReflectUtils 
at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:166) 
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) 
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216) 
at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104) 
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69) 
... 19 more 

ho solo questo errore durante l'esecuzione del progetto di test come JUnit test Android , se lo eseguo come un normale test di JUnit, powermock funziona, ma poi tutti i miei test che richiedono il framework Android falliscono naturalmente.

Come posso risolvere questo? Sono molto nuovo ai test unitari quindi non capisco ancora tutti i concetti.

+0

Hai risolto? –

risposta

2

Si potrebbero avere versioni ambigue di librerie JUnit nell'impostazione del percorso di classe dei test in Android. Stai cercando di eseguire JUnit 3 o 4? Il tuo codice utilizza le annotazioni di 4, ma estende anche la classe base 3 di TestCase e non puoi combinare le due. Al giorno d'oggi è meglio usare JUnit 4. Non ho molta familiarità con lo sviluppo di Android, quindi controlla quale versione di JUnit l'ambiente Android sta cercando. La prossima cosa da verificare è se stai utilizzando la versione corretta di PowerMock, poiché ne esistono diverse versioni per JUnit 3 e 4.

Problemi correlati