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

429
Views
¿Por qué AsyncPagingDataDiffer submitData() debe congelar y agotar el tiempo de espera de la prueba?

Estoy tratando de seguir esta documentación aquí sobre cómo probar unitariamente un flujo de PagingData en el que está aplicando transformaciones. El código que estoy usando es similar:

 @ExperimentalCoroutinesApi @Test fun testGetFooBarsPaged(): Unit = runTest { val differ = AsyncPagingDataDiffer( object : DiffUtil.ItemCallback<FooBar>() { override fun areItemsTheSame(oldItem: FooBar, newItem: FooBar) = false override fun areContentsTheSame(oldItem: FooBar, newItem: FooBar) = false }, object : ListUpdateCallback { override fun onChanged(position: Int, count: Int, payload: Any?) {} override fun onMoved(fromPosition: Int, toPosition: Int) {} override fun onInserted(position: Int, count: Int) {} override fun onRemoved(position: Int, count: Int) {} } ) val pagingData = fooBarsSdk.getFooBarsPaged(FooBar.Type, pageSize = 1).first() differ.submitData(PagingData.from(listOf(FooBar(), FooBar(), FooBar()))) }

Las últimas dos líneas en la prueba aquí se ejecutan y la prueba termina con éxito:

  1. getFooBarsPaged() recupera un Flow<PagingData>, al que puedo llamar first() y recuperar la primera instancia de PagingData<FooBar>.
  2. Y en la siguiente línea, puede ver que también puedo enviar una lista arbitraria de objetos FooBar a mi objeto AsyncPagingDataDiffer sin ningún problema.

El problema es cuando intento enviar la instancia de PagingData que tomé del flujo al objeto AsyncPagingDataDiffer: differ.submitData(pagingData) . Esta invocación se bloquea hasta que runTest() supera el tiempo de espera después de 60 segundos. Mi pregunta es, ¿por qué sucedería eso?

El objeto Pager y el flujo se crean así:

 Pager( config = PagingConfig(pageSize), initialKey = null, pagingSourceFactory = factory.asPagingSourceFactory(Dispatchers.Default) ).flow.map { pagingData -> pagingData.map { fooBarEntity -> fooBarEntity.toFooBar() } }

donde la fábrica de fuentes de datos se recupera de un método Room Dao como este:

 @Query("SELECT DISTINCT * FROM foobars WHERE type = :type") fun getAllFooBarsByTypeLive(type: String): DataSource.Factory<Int, FooBarEntity>
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

los siguientes trabajos aquí:

 val job = launch { val pagingData = Pager( config = PagingConfig(20), initialKey = null, pagingSourceFactory = db.fooBarDao().getAllFooBarsByTypeLive("test") .asPagingSourceFactory() ).flow.map { pagingData -> pagingData.map { fooBarEntity -> fooBarEntity.toFooBar() } } .toList()[2] differ.submitData(pagingData) } job.cancel()

Por supuesto, necesito al menos 3 elementos en tu flujo. Cómo probar PagingData de Paging 3

La razón por la cual

 val pagingData = fooBarsSdk.getFooBarsPaged(FooBar.Type, pageSize = 1).first() differ.submitData(PagingData.from(listOf(FooBar(), FooBar(), FooBar())))

funciona es que está usando "desde" y luego no necesita iniciar, ya que puede leer aquí https://developer.android.com/topic/libraries/architecture/paging/test

over 4 years ago · Santiago Trujillo Report
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!