加入我们,从10月8日到10月10日,在纽约市了解关于GraphQL联邦和API平台工程的最新的技巧、趋势和新闻。参加2024年纽约市的GraphQL峰会
文档
免费开始
您正在查看此软件先前版本的文档。 切换到最新稳定版本。

模拟 HTTP 响应(实验性)


ℹ️ MockServer 仍然是实验性的,大部分 API 都是针对 Kotlin 设计的。MockServer 是跨平台的,但如果您只使用 Java,我们推荐使用 OkHttp MockWebServer,这将提供惯用的 Java API。

MockServer 实现了一个 HTTP 服务器,您可以使用它来模拟响应。它对于测试特定的服务器行为非常有用,例如错误情况、HTTP 头和超时。使用它需要最小化对生产代码的修改,因为您只需要更改您的 serverUrl

另请参阅 TestNetworkTransport,它处理在 级别而不是 HTTP 级别进行模拟。

将依赖项添加到项目的 build.gradle 文件中:

build.gradle[.kts]
dependencies {
testImplementation("com.apollographql.apollo3:apollo-mockserver:3.8.5")
}

以下是如何使用它的方法

// Create a mock server
val mockServer = MockServer()
// Provide its URL to your ApolloClient
val apolloClient = ApolloClient.Builder().serverUrl(mockServer.url()).store(store).build()
// Enqueue HTTP responses
mockServer.enqueue("""{"data": {"random": 42}}""")
mockServer.enqueue(
MockResponse(
body = "Internal server error",
statusCode = 500,
headers = mapOf("X-Test" to "true"),
// Optionally pass a delay to simulate network latency
delayMillis = 1000L,
)
)
// Execute queries
val response1 = apolloClient
.query(GetRandomQuery())
.execute()
val response2 = apolloClient
.query(GetRandomQuery())
.execute()
// Don't forget to stop the server when you're done
mockServer.stop()

默认情况下,enqueue函数通常接受一个MockResponse作为参数,但也支持简写版本,该版本接受一个String(上面都显示了)。

高级用法

默认情况下,MockServer配置了QueueMockServerHandler,它以队列中顺序返回响应。如果你需要更多控制返回响应,可以实现自己的MockServerHandler并将其传递给MockServer

val customHandler = object : MockServerHandler {
override fun handle(request: MockRequest): MockResponse {
return if (/* Your custom logic here */) {
MockResponse(
body = """{"data": {"random": 42}}""",
headers = mapOf("X-Test" to "true"),
)
} else {
MockResponse(
body = "Internal server error",
statusCode = 500,
)
}
}
}
val mockServer = MockServer(customHandler)

注意,如果你使用自定义的MockServerHandler,则无法调用MockServer.enqueue(),因为它期望处理程序是QueueMockServerHandler

上一页
概览
下一页
模拟GraphQL响应
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apache Graph Inc.,商号为Apollo GraphQL。

隐私政策

公司