2012-07-03 14 views
6

Estoy tratando de usar PowerMock para simular algunas clases utilizadas en la prueba de nuestra aplicación de Android (BluetoothSocket, por ejemplo).VerifyError con PowerMock en Android

He descargado el archivo comprimido en la página de códigos de Google de PowerMock con todas las dependencias y las he agregado a mi proyecto de prueba de Android (incluida la ruta de compilación).

Sin embargo, cuando intento utilizar PowerMock así:

@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(); 
    } 
} 

consigo el seguimiento de pila:

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 

sólo consigo este error cuando se ejecuta el proyecto de prueba como una prueba JUnit Android , si lo ejecuto como una prueba de JUnit normal powermock funciona, pero entonces todas mis pruebas que necesitan el marco Android naturalmente falla.

¿Cómo puedo solucionar esto? Soy muy nuevo en las pruebas unitarias, así que realmente no entiendo todos los conceptos.

+0

¿Lo has resuelto? –

Respuesta

2

Es posible que tenga versiones ambiguas de las bibliotecas JUnit en la configuración classpath de sus pruebas en Android. ¿Estás tratando de ejecutar con JUnit 3 o 4? Tu código está usando anotaciones de 4, pero también extiende la clase base de TestCase de 3, y no puedes mezclar los dos. Hoy en día es mejor utilizar JUnit 4. No estoy muy familiarizado con el desarrollo de Android, así que compruebe qué versión de JUnit está buscando el entorno de Android. Lo siguiente que debes comprobar es si estás usando la versión correcta de PowerMock, ya que hay diferentes versiones de la misma para JUnit 3 y 4.

Cuestiones relacionadas