你如何模拟 Python Kubernetes 客户端 CoreV1Api

How do you mock Python Kubernetes client CoreV1Api

我正在使用 Kubernetes 客户端:Kubernetes

我的函数:

    def __get_gateway_token_secret(self):
    try:
        self.__get_kubernetes_config()
        api = client.CoreV1Api()
        secret = api.read_namespaced_secret(self.secret_name, self.namespace)
        logging.debug(f'Kubernetes secret found: {base64.b64decode(secret.data["value"])}')
    except Exception as e:
        logging.error(f'Error retrieving Kubernetes Secret: {e}')
        raise e
    return secret

单元测试:

@patch.object(K8s, '_K8s__get_kubernetes_config')
def test_get_gateway_token_secret_returns_secret(self, kubernetes_config_mock):
    kubernetes_config_mock.return_value = MagicMock()

    api = client.CoreV1Api()
    test_object = K8s()

    with patch.object(api, 'read_namespaced_secret', return_value='test'):
        result = test_object._K8s__get_gateway_token_secret()

我在嘲笑 __get_kubernetes_config() 私有方法就好了。我需要模拟“api.read_namespaced_secret()”调用。如上所示,我已尝试使用“with patch.object”,但那是在进行实际调用。可以模拟吗?

一切(或几乎一切)都可以模拟 :)

在此示例中,您在 CoreV1Api 的实际实例上模拟方法,但在您的方法 __get_gateway_token_secret 中,您正在创建 CoreV1APi.[=13 的不同新实例=]

您应该将补丁应用到 class,而不是实例。或者重构您的代码。