Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

291
Views
¿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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!