小编MR3*_*3YY的帖子

如何对分页 3(PagingSource)进行单元测试?

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 …
Run Code Online (Sandbox Code Playgroud)

android android-paging-library

16
推荐指数
1
解决办法
2522
查看次数

Flow&lt;List&lt;T&gt;&gt; 而不是使用 Flow&lt;T&gt;?

我注意到很多人和例子使用 Flows 作为 List<> 的包装器,例如这样:

@Query("SELECT * from some_model ORDER BY some_field")
fun getData(): Flow<List<some_model>>
Run Code Online (Sandbox Code Playgroud)

据我所知,Flow 就像一种“异步序列”,所以我真的不明白“Flow<List<T>>”的含义。

为什么我们不能直接使用 Flow< T > ,这对我来说似乎很直观,我问这个问题是因为我在代码片段中看到它重复了很多次并且无法理解其背后的目的?

kotlin reactive-streams kotlin-flow

3
推荐指数
1
解决办法
480
查看次数