Obtener un contexto para su uso en AndroidTestCase cuando la clase bajo prueba no es una actividad

Estoy intentando probar usando AndroidTestCase. Estoy intentando probar solamente una clase particular en mi uso, sin embargo esta clase no extiende la actividad, el servicio o cualquier otra cosa. Es básicamente una clase Java simple aparte del hecho de que requiere un Contexto. Es un pojo y algunas de sus variables son objetos que requieren llamadas api de android en su creación, por ejemplo, una llamada al SensorManager. Traté de usar:

Context context = getContext(); 

Cuando ejecuto mis pruebas esto me da la excepción "Servicios del sistema no disponibles para activites antes onCreate ()". ¿Tiene que ser reemplazado? final Context context = new IsolatedContext(null, getContext()) da lo mismo.

La razón por la que estoy utilizando el marco de pruebas de Android y no algo como Robolectric es porque la clase que estoy probando reúne información de hardware acerca de un dispositivo y por lo tanto quiero ejecutar las pruebas en un dispositivo real. He mirado los documentos del desarrollador para AndroidTestCase pero no puedo ver lo que estoy buscando en los ejemplos. No estoy seguro de que las otras clases de casos de prueba lograrán lo que quiero. ¿Algunas ideas?

Mi clase de prueba:

 public class DeviceTest extends AndroidTestCase { ClassToTest mClassToTest; @Override protected void setUp() throws Exception { final Context context = new IsolatedContext(null, getContext()) { @Override public Object getSystemService(final String pName) { return getContext().getSystemService(pName); } }; mClassToTest = new ClassToTest(context); super.setUp(); } public void testClassMethod() { Object mObject; mObject = mClassToTest.getObject(); assertNotNull(mObject); } @Override protected void tearDown() throws Exception { mClassToTest = null; super.tearDown(); } } 

Gracias por adelantado.

UPDATE: Después de cambiar mi configuración a lo siguiente:

  @Override protected void setUp() throws Exception { super.setUp(); context = this.getContext(); mClassToTest = new ClassToTest(context); } 

Estoy recibiendo un error que el contexto es nulo. ¿En qué escenarios AndroidTestCase.getContext () devolverá null? Mi configuración parece estar bien ….

Hay algunas maneras alrededor de esto, usted podría utilizar un mockcontext como una solución o si usted realmente no cuida cuál es el contexto apenas que es válido usted puede utilizar un InstrumentationTestCase y conseguir el contexto de la prueba apk vía getInstrumentation (). GetContext ().

Creo que la razón de su contexto es nulo es que en realidad no existe ningún contexto de Android en este punto, puede obtener uno mediante la creación de una aplicación o una actividad.

Desde AndroidTestCase puede acceder directamente a mContext, o llamar a getContext ().

Desde el contexto devuelto por aquellos, también se puede llamar Context.getApplicationContext () si se desea.

Puede utilizar mContext de la superclase (AndroidTestCase). Lo usé para la prueba de la base de datos donde se requiere el contexto.

AndroidTestCase.class

 public class AndroidTestCase extends TestCase { protected Context mContext; ... } 

Podrías usar Context en la clase heredada de AndroidTestCase.

TestDb.java

 public class TestDb extends AndroidTestCase { void deleteTheDatabase() {mContext.deleteDatabase(DB_NAME)}; } 
  • Android prueba: aplicación de destino vs aplicación de prueba?
  • Operación de la cámara Prueba de la interfaz de usuario con Espresso
  • Unidad de pruebas de las clases de Android realista. Entorno de prueba, ciclo de vida y respuestas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.