Android mock Cámara
¿Es posible burlarse de la clase de cámara Android?
@Override public void setUp() { _camera = Mockito.mock(Camera.class); }
falla al generar un simulacro ( ExceptionInitializerError
en createProxyClass de createProxyClass
).
- Actividad de prueba onCreate Exception
- Prueba de Mockito + Dexmaker se bloquea cuando se ejecuta en Android <4.4
- Cómo probar la unidad android y burlarse de un método estático
- Mockito - ¿Qué hace el método de verificación?
- RoboGuice unidad de prueba de inyección de módulo de aplicación en lugar de módulo de prueba
¿Debería crear algún tipo de envoltorio alrededor de la Camera
(no es mi solución favorita, realmente me gustaría burlar la clase …)?
O, ¿debo usar una biblioteca simulada diferente entonces Mockito?
Espero que alguien me pueda señalar en la dirección correcta.
Complete stacktrace de ExceptionInitializerError
java.lang.ExceptionInInitializerError at org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85) at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62) at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56) at org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23) at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26) at org.mockito.internal.MockitoCore.mock(MockitoCore.java:51) at org.mockito.Mockito.mock(Mockito.java:1243) at org.mockito.Mockito.mock(Mockito.java:1120) at com.cleancode.lifesaver.flashlight.test.FlashLightTests.setUp(FlashLightTests.java:20) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661) Caused by: java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167) at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217) at org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145) at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117) at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109) at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105) at org.mockito.cglib.proxy.Enhancer.<clinit>(Enhancer.java:70) ... 18 more
- ¿Cómo usar PowerMock en proyectos de Android?
- Espresso inyectando un objeto simulador presentador
- Llamadas de método de burla usando power mockito - org.powermock.api.mockito.ClassNotPreparedException
- Prueba de Junit de Android: no se encuentra excepción de clase Mockito
- VerifyError con Mockito 1.9.5 y DexMaker-Mockito-1.0
- Android: Unidad de pruebas de aplicaciones Android con Robolectric y Mockito
- ¿Cómo usar Mockito con dexmaker para la prueba de Android?
- Powermockito puede utilizarse con Android Studio 1.2
En su stacktrace, observe la subcadena ".CglibMockMaker": ese es el problema aquí. CGLib no funciona en Android – hay un complemento para Mockito específicamente para Android que utiliza dexmaker, que es como CGLib pero funciona para dalvik. Sólo busca para dexmaker mockito y deberías estar en el camino correcto.
Todavía no podrá burlarse de Camera.open () (el método estático de fábrica), pero puede refactorizar su código alrededor de eso. Lo que importa es que Camera no es una clase final; el resto es sólo tubería torpe para la prueba, que sólo debe aceptar como el impuesto para la escritura de aplicaciones Android bien probado.
La respuesta es tarde, pero aquí hay un ejemplo de cámara falsa para Android.
Puede configurar VideoFileInputSource para imitar la cámara desde un archivo de vídeo
textureVideoInputSource = new VideoFileInputSource(this, "mock_input_video.mp4");
o puede habilitar la cámara de hardware para la secuencia de vídeo.
textureVideoInputSource = new CameraTextureVideoInputSource(this);
Aquí puede encontrar el proyecto completo de la muestra. https://github.com/muneikh/MockCamera
Creo que la excepción ExceptionInInitializerError
está sucediendo porque la Camera
sólo se supone que se instancia a través de su método estático open()
, por lo que algún tipo de inicialización estática está fallando cuando Mockito trata de crear un simulacro. No parece ser posible trabajar alrededor de eso. Tal vez espera interactuar con hardware que no está presente en un entorno de prueba? Usted puede ser capaz de utilizar PowerMock para burlarse de todos modos, o puede que sólo quieren ir con su alternativa declarada de una clase de contenedor con una interfaz.
- importar Facebook SDK en mi proyecto android – error Gradle
- Edición de smali. Problema: Bajo 16 bits se debe poner a cero. Es el id hexadecimal es incorrecto?