我如何模拟 Apollo Android 的响应

Posted

技术标签:

【中文标题】我如何模拟 Apollo Android 的响应【英文标题】:How I can mock response of Apollo Android 【发布时间】:2021-10-15 21:42:20 【问题描述】:

我试图模拟对我的查询的响应,但我不能,因为构建器需要并且不知道如何传递操作?

基本上我有这样的网络类:

 class NetworkService @Inject constructor(
   private val apolloClient: ApolloClient
    ) 

suspend fun <D : Operation.Data, T, V : Operation.Variables> suspendedQuery(
    query: Query<D, T, V>,
    cachePolicy: HttpCachePolicy.Policy = HttpCachePolicy.NETWORK_FIRST
): Resource<Response<T>> 

    val response = try 

        apolloClient.query(query)
            .toBuilder().httpCachePolicy(cachePolicy)
            .build()
            .await()

     catch (e: ApolloException) 
        return Resource.error(e.localizedMessage)
    
    return if (response.hasErrors()) 
        Resource.error(response.errors.toString())
     else 
        Resource.success(response)
    
 

我想像这样模拟从这个函数返回的响应

当我返回错误时我成功了 val expectedResponse = Resource.error&lt;Response&lt;MyQuery.Data&gt;&gt;("ERROR")

但我在这里嘲笑响应有问题: val expectedResponse = Resource.success&lt;Response&lt;MyQuery.Data&gt;&gt;(Response("Response.builder(Operation&lt;&gt;)"))

我想知道如何构建里面的引用“Response.builder(Operation)”?

【问题讨论】:

【参考方案1】:

根据apollo-android issues list,这似乎是一个长期存在的问题。我可以看到你在那里也问过类似的问题。

我找到了this issue,它看起来会在不久的将来解决这个问题。应该是这个月,但现在看起来像下一个。

因此认为这意味着您现在唯一的解决方案是使用模拟 Web 服务器,并让它向客户端返回一个示例响应。这就是我们目前实施测试的方式。

【讨论】:

我不想将 apollo 客户端模拟为网络服务器的原因,因为我只需要模拟响应而不是整个客户端 是的,我明白了。我们也想做同样的事情,但我们能找到的唯一方法是使用模拟网络服务器,然后将客户端指向它。

以上是关于我如何模拟 Apollo Android 的响应的主要内容,如果未能解决你的问题,请参考以下文章

React Apollo 错误:查询不再有模拟响应:突变

如何在 Kotlin Android 中读取 Apollo Client 响应/GraphQL 响应的响应数据

如何测试一个变量设置为随机的 Apollo 突变?

在 GraphQL Apollo Client iOS 中模拟 JSON 数据解析

如何测试使用 apollo 客户端 Reactive Var 的组件

通过 Apollo 在 React Native 应用程序上使用 GraphQL 查询