如何在不连接 Launch Darkly 的情况下模拟功能切换?
How to mock feature toggle without connection to Launch Darkly?
我有一个新的代码行,它必须被功能切换包围。由于它是一项服务(Flask 应用程序),它会在启动时启动其所有连接以及与外部源的相关集成 - 在执行单元测试时我没有 LaunchDarkly 运行 的实例。
是否有一种简单的方法可以在 Python 中为 unit-tests/integration-tests 模拟和预定义功能切换?我正在使用 pytest 编写单元测试。
我的代码示例:
if FeatureToggle.is_enabled("my-feature-toggle-name"):
*my code logic*
is_enabled()
方法实现:
@staticmethod
def is_enabled(flag_name: str, user_key: str=None, custom_params: dict=None) -> bool:
if user_key is None:
user_key = 'defaut_user_key'
return FeatureToggle.ld_client.variation(flag_name, {"key": user_key, "custom": custom_params}, False)
当 运行 应用程序 FeatureToggle.ld_client
以适当的 api 键启动时暗启动,然后允许我使用他们的 variation()
方法。
我知道当没有 ld_client
的实例时,我可以将我的 is_enabled()
方法更改为 return 预定义值,但我正在寻找更优雅的方法来做到这一点。
谢谢!
所以在调查和建议我的同事之后,这可以通过使用 unittest.mock 库来完成。
当我有完整的工作解决方案时,我会更新答案
我还要补充一点,除了使用模拟库之外,您还可以实例化客户端以从文件[1] 中读取,而不是连接到 LaunchDarkly API。通过这种方式,您可以拥有一组可用于测试目的的预先确定的测试值。
我有一个新的代码行,它必须被功能切换包围。由于它是一项服务(Flask 应用程序),它会在启动时启动其所有连接以及与外部源的相关集成 - 在执行单元测试时我没有 LaunchDarkly 运行 的实例。
是否有一种简单的方法可以在 Python 中为 unit-tests/integration-tests 模拟和预定义功能切换?我正在使用 pytest 编写单元测试。
我的代码示例:
if FeatureToggle.is_enabled("my-feature-toggle-name"):
*my code logic*
is_enabled()
方法实现:
@staticmethod
def is_enabled(flag_name: str, user_key: str=None, custom_params: dict=None) -> bool:
if user_key is None:
user_key = 'defaut_user_key'
return FeatureToggle.ld_client.variation(flag_name, {"key": user_key, "custom": custom_params}, False)
当 运行 应用程序 FeatureToggle.ld_client
以适当的 api 键启动时暗启动,然后允许我使用他们的 variation()
方法。
我知道当没有 ld_client
的实例时,我可以将我的 is_enabled()
方法更改为 return 预定义值,但我正在寻找更优雅的方法来做到这一点。
谢谢!
所以在调查和建议我的同事之后,这可以通过使用 unittest.mock 库来完成。
当我有完整的工作解决方案时,我会更新答案
我还要补充一点,除了使用模拟库之外,您还可以实例化客户端以从文件[1] 中读取,而不是连接到 LaunchDarkly API。通过这种方式,您可以拥有一组可用于测试目的的预先确定的测试值。