你如何模拟 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,而不是实例。或者重构您的代码。
我正在使用 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,而不是实例。或者重构您的代码。