Estoy escribiendo algunas pruebas de POJO para mi código de Android.Probando el código de Android con JUnit y el JDK
Quiero ejecutarlos localmente con el JDK (no con Dalvik en el emulador) - por velocidad, JUnit 4, Mockito, y poder ejecutar sin cabeza sin un dispositivo - entonces tengo un proyecto "Java" separado en Eclipse.
Si el método que estoy probando ocurre hacer referencia a cualquier cosa, desde el SDK de Android, por ejemplo, android.util.Log
, la prueba falla; esto tiene sentido porque android.jar
no está en la ruta de clase. Para reproducir tengo este caso de prueba:
public class FooTests {
@Test
public void testFoo() {
android.util.Log.d("x", "y");
}
}
Si añado android.jar
explícitamente a la ruta de clase del proyecto de prueba, consigo excepciones como
java.lang.RuntimeException: Stub!
at android.util.Log.d(Log.java:7)
at com.example.FooTests.testFoo(FooTests.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
¿Hay una manera de hacer que el código sin burla a cabo cada último bit de la dependencia de Android SDK? Tal vez ya existe una android.jar
falsa?
EDITAR: Por ahora me terminó envolviendo clases como android.util.Log
e inyectarlas en los casos, para la prueba clásica basada en el COI. La sugerencia de PowerMock de Scott es mi próximo paso cuando lo necesite.
LATER EDIT: Robolectric!
+1 Buenos puntos, probaré PowerMock. Todos los enlaces relevantes más allá de https://sites.google.com/site/androiddevtesting/? – orip
No he visto ese enlace anteriormente, pero es excelente, Gracias por compartir. Me encuentro haciendo referencia a la sección de "uso" de Powermock en su sitio web con bastante frecuencia cuando trato de descubrir las diversas formas que se necesitan para burlarse de las clases de jar android: http://code.google.com/p/ powermock /. – Scott