You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试OkHttp拦截器是否成功添加Authorization请求头?

测试OkHttp拦截器添加请求头的解决方案

核心思路

要验证拦截器是否成功添加Authorization头,关键是捕获经过拦截器处理后的请求对象——只拿响应是看不到请求头细节的。OkHttp官方提供的MockWebServer是做这类测试的标准工具,它能完整记录服务器收到的每一个请求的所有信息。

具体实现步骤

1. 添加测试依赖

确保你的测试依赖中包含MockWebServer(版本要和OkHttp主版本一致):

testImplementation 'com.squareup.okhttp3:mockwebserver:4.11.0' // 替换为你使用的OkHttp版本

2. 编写Spock测试用例

import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
import spock.lang.Specification

class AuthRequestInterceptorSpec extends Specification {
    MockWebServer mockWebServer = new MockWebServer()
    OkHttpClient clientWithInterceptor

    def setup() {
        // 初始化带有目标拦截器的OkHttpClient
        clientWithInterceptor = new OkHttpClient.Builder()
                .addInterceptor(new AuthRequestInterceptor()) // 你的Auth拦截器实例
                .build()
        mockWebServer.start()
    }

    def cleanup() {
        mockWebServer.shutdown()
    }

    def "拦截器应正确添加Authorization请求头"() {
        given:
        // 让MockWebServer返回一个空的成功响应
        mockWebServer.enqueue(new MockResponse().setResponseCode(200))

        when:
        // 向MockWebServer发送测试请求
        Request testRequest = new Request.Builder()
                .url(mockWebServer.url("/api/test"))
                .build()
        clientWithInterceptor.newCall(testRequest).execute()

        then:
        // 获取MockWebServer记录的实际请求
        def recordedRequest = mockWebServer.takeRequest()
        // 验证Authorization头存在且符合预期值
        recordedRequest.getHeader("Authorization") == "Bearer your-expected-token" // 替换为拦截器要添加的实际值
    }
}

3. 关键细节说明

  • mockWebServer.takeRequest()会返回Mock服务器收到的真实请求对象,里面包含所有经过拦截器处理后的请求头、请求体等信息。
  • 测试完全脱离真实后端,避免外部依赖干扰测试结果,保证测试的稳定性。
  • 如果拦截器中的Authorization token是动态生成的,建议把token的获取逻辑抽象成可注入的依赖(比如通过构造函数传入),这样测试时可以固定token值,方便断言。

为什么之前的测试会失败

你之前的测试只获取响应,但响应本身不会携带请求头的信息,自然无法验证拦截器是否修改了请求。只有通过MockWebServer拦截并记录请求,才能拿到经过拦截器处理后的完整请求细节,这是OkHttp拦截器功能测试的标准方案。

内容的提问来源于stack exchange,提问作者Prem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:05:21