Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

286
Vistas
¿Existe alguna solución para simular el modelo de vista inyectado de una segunda actividad abierta durante una prueba instrumentada en Android?

Estoy escribiendo una prueba instrumentada para una actividad usando ActivityTestRule que abrirá una segunda actividad presionando un botón en la actividad bajo prueba (primera).

El problema es que la segunda actividad usa la inyección de dependencia para inyectar una fábrica de modelos de vista para crear su modelo de vista, pero durante las pruebas, la inyección está deshabilitada. En cambio, mientras se prueba directamente la segunda actividad, se establece una fábrica personalizada que contiene un modelo de vista simulado como activity.viewModelFactory para simular el comportamiento del modelo de vista. Pero en la situación explicada anteriormente, la primera actividad intenta abrir la segunda actividad con la inyección deshabilitada y tampoco configurada manualmente de fábrica, por lo que la prueba fallará con el siguiente error:

 kotlin.UninitializedPropertyAccessException: lateinit property viewModelFactory has not been initialized

Para tener una mejor imagen del escenario, esta es la prueba que estoy tratando de ejecutar:

 @Test fun testLogin() { // ... mock server configuration onView(withId(R.id.etEmail)) .perform(typeText("dummyUserName")) // enter username onView(withId(R.id.etPassword)) .perform(typeText("dummyPassword"), closeSoftKeyboard()) // enter password onView(withId(R.id.btLogin)) .perform(click()) // click on login: this is where the second activity will try to be opened and the error occurs. }

Y así es como la segunda actividad accede a su modelo de vista:

 class SecondActivity : AppCompatActivity() { @Inject // 1. injection is disabled during tests. lateinit var viewModelFactory: ViewModelProvider.Factory private lateinit var viewModel: SecondActivityViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_second) // 2. this line fails, because viewModelFactory is null. viewModel = ViewModelProviders.of(this, viewModelFactory).get(SecondActivityViewModel::class.java) } ... }

Teniendo esto en cuenta, me preguntaba si existe una solución para evitar que se abra la segunda actividad (ya que su comportamiento es irrelevante aquí) o si existe una solución para que la fábrica ficticia que contiene el modelo de vista simulada se use en la segunda actividad durante la prueba. la primera actividad (cómo inicializar viewModelFactory cuando se abre la segunda actividad).

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda