write unittest unit tests test support studio run instrumentationregistry dependency and java android mocking mockito android-instrumentation

java - unittest - ¿Usar Mockito-core para crear una clase final falsa?



unittest android (1)

En el ejemplo de Github encuentro cómo con el estándar Mockito hace una instancia de la clase final (BluetoothGatt.class):

... @RunWith(RobolectricTestRunner.class) @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public class OnBoardingServiceTest { private BluetoothGattCharacteristic characteristic; private OnBoardingService service; private BluetoothGattReceiver receiver = new BluetoothGattReceiver(); @Before public void initialise() { BleDevice bleDevice = mock(BleDevice.class); when(bleDevice.getType()).thenReturn(BleDeviceType.WunderbarMIC); BluetoothGatt gatt = mock(BluetoothGatt.class); ...

Pero de Mockito FAQ :

Cuáles son las limitaciones de Mockito

  • Necesita Java 1.5+
  • No se puede burlar de las clases finales
  • ...

Comprobé que es BluetoothGatt del estándar android-sdk, por lo que parece una clase final falsa. Ahora intento construir el proyecto, para asegurarse de que esta prueba funcione. ¿Cómo puede hacer una clase final falsa aquí con el núcleo mockito? Y si el código finalmente no funciona, ¿tienes alguna idea de cómo burlarse de la clase final para las pruebas de instrumentación de Android? (Ya estoy probando PowerMock ). Gracias


Robolectric está diseñado para crear y sustituir implementaciones de clases estándar de Android, incluidas clases y métodos finales. Debajo del capó, funciona de maneras muy similares a PowerMockito, utilizando su propio cargador de clases para establecer un classpath que favorezca sus propios simulacros.

Las implementaciones simuladas de las clases de Android en Robolectric se llaman sombras , y la biblioteca está incompleta; Es probable que desee crear una sombra personalizada que se adapte a sus necesidades.

Todavía no es fácil usar Mockito para las llamadas a métodos, pero puede usar los métodos de Robolectric para obtener instancias de sus sombras y escribir implementaciones paralelas que guardan los argumentos del método en instancias (y demás).