我如何模拟 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<Response<MyQuery.Data>>("ERROR")
但我在这里嘲笑响应有问题:
val expectedResponse = Resource.success<Response<MyQuery.Data>>(Response("Response.builder(Operation<>)"))
我想知道如何构建里面的引用“Response.builder(Operation)”?
【问题讨论】:
【参考方案1】:根据apollo-android issues list,这似乎是一个长期存在的问题。我可以看到你在那里也问过类似的问题。
我找到了this issue,它看起来会在不久的将来解决这个问题。应该是这个月,但现在看起来像下一个。
因此认为这意味着您现在唯一的解决方案是使用模拟 Web 服务器,并让它向客户端返回一个示例响应。这就是我们目前实施测试的方式。
【讨论】:
我不想将 apollo 客户端模拟为网络服务器的原因,因为我只需要模拟响应而不是整个客户端 是的,我明白了。我们也想做同样的事情,但我们能找到的唯一方法是使用模拟网络服务器,然后将客户端指向它。以上是关于我如何模拟 Apollo Android 的响应的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Kotlin Android 中读取 Apollo Client 响应/GraphQL 响应的响应数据
在 GraphQL Apollo Client iOS 中模拟 JSON 数据解析