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

使用client-go的fake客户端Mock错误不生效该如何解决?

问题原因

  • 核心错误是Fake客户端的Reactor匹配规则写错了:Kubernetes REST API中Secret对应的资源名称是小写复数形式secrets,你测试代码里填的是单数secret,导致你定义的Reactor根本匹配不到业务代码里发起的Secret列表请求,自然不会返回预期错误。
  • 额外需要确认getKubeClient()返回的确实是client-go自带的fake clientset实例,而非真实集群客户端。

修正方案

仅需要修改测试代码中PrependReactor的第二个参数为secrets即可,修正后的测试代码如下:

func TestWhenItsNotPossibleToFetchTheSecrets_ThenAnErrorIsReturned(t *testing.T) {
    kubeClient := getKubeClient()
    kubeClient.CoreV1().(*fakecorev1.FakeCoreV1).
        // 把第二个参数从"secret"改为"secrets"
        PrependReactor("list", "secrets", func(action testingk8s.Action) (handled bool, ret runtime.Object, err error) {
            return true, &v1.SecretList{}, errors.New("error listing secrets")
        })
    r := getRefresher(kubeClient)

    err, warnings := r.RefreshNamespace(context.Background(), "target-ns")

    require.Error(t, err, "an error should have been raised")
}

额外说明

如果后续遇到其他资源的Reactor匹配失效问题,可以直接查Kubernetes API文档确认对应资源的REST路径名称,所有核心资源的Reactor匹配名都使用小写复数形式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:45:05