MR3*_*3YY 16 android android-paging-library
Google 最近宣布了新的 Paging 3 库、Kotlin-first 库、对协程和 Flow 的支持等。
我玩过他们提供的代码实验室,但似乎还没有任何测试支持,我还检查了文档。他们没有提到任何关于测试的内容,所以例如我想对这个 PagingSource 进行单元测试:
class GithubPagingSource(private val service: GithubService,
private val query: String) : PagingSource<Int, Repo>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Repo> {
//params.key is null in loading first page in that case we would use constant GITHUB_STARTING_PAGE_INDEX
val position = params.key ?: GITHUB_STARTING_PAGE_INDEX
val apiQuery = query + IN_QUALIFIER
return try {
val response = service.searchRepos(apiQuery, position, params.loadSize)
val data = response.items
LoadResult.Page(
data,
if (position == GITHUB_STARTING_PAGE_INDEX) null else position - 1,
if (data.isEmpty()) null else position + 1)
}catch (IOEx: IOException){
Log.d("GithubPagingSource", "Failed to load pages, IO Exception: ${IOEx.message}")
LoadResult.Error(IOEx)
}catch (httpEx: HttpException){
Log.d("GithubPagingSource", "Failed to load pages, http Exception code: ${httpEx.code()}")
LoadResult.Error(httpEx)
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么,我该如何测试这个,有人可以帮助我吗?
Ada*_*itz -3
您可以使用 JUnit 本地测试并设置TestCoroutineDispatcher测试运行之前和之后。然后,调用发出 Kotlin Flow 的方法,PagingSource在本地测试环境中观察结果数据,与您的预期进行比较。
不需要 JUnit 5 测试扩展。只需在每次测试之前和之后设置和清除调度程序,即可观察测试环境中的协程与 Android 系统上的协程。
@ExperimentalCoroutinesApi
class FeedViewTestExtension : BeforeEachCallback, AfterEachCallback, ParameterResolver {
override fun beforeEach(context: ExtensionContext?) {
// Set TestCoroutineDispatcher.
Dispatchers.setMain(context?.root
?.getStore(TEST_COROUTINE_DISPATCHER_NAMESPACE)
?.get(TEST_COROUTINE_DISPATCHER_KEY, TestCoroutineDispatcher::class.java)!!)
}
override fun afterEach(context: ExtensionContext?) {
// Reset TestCoroutineDispatcher.
Dispatchers.resetMain()
context?.root
?.getStore(TEST_COROUTINE_DISPATCHER_NAMESPACE)
?.get(TEST_COROUTINE_DISPATCHER_KEY, TestCoroutineDispatcher::class.java)!!
.cleanupTestCoroutines()
context.root
?.getStore(TEST_COROUTINE_SCOPE_NAMESPACE)
?.get(TEST_COROUTINE_SCOPE_KEY, TestCoroutineScope::class.java)!!
.cleanupTestCoroutines()
}
...
}
Run Code Online (Sandbox Code Playgroud)
您可以在app/src/test/java/app/coinverse/feedViewModel/FeedViewTest下的 Paging 2 Coinverse 示例应用程序中查看本地 JUnit 5 测试。
Paging 3 的区别在于您不需要设置 LiveData 执行器,因为 Kotlin Flow 可以返回PagingData。
| 归档时间: |
|
| 查看次数: |
2522 次 |
| 最近记录: |