Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

290
Visualizações
¿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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda