【发布时间】:2021-01-05 17:57:17
【问题描述】:
我对 pytest 框架非常陌生,在探索过程中,我检查了一些术语,例如模拟、猴子补丁等。我基本上理解了它们中的每一个的定义,但是将它们应用于我的功能代码的问题。我的父方法的 init 类读取一些环境变量并将它们传递给方法。
我在应用 mocking/monkey_patching 这些变量并通过带有假数据的测试用例时遇到了困难。准确地说,请查看以下示例
场景:
class sampleDB(object):
config_keys = ["foo_env", "bar_env", "foo_pass", "bar_pass"]
def __init__(self, database, conf=None):
os.environ["foo_env"] = os.getenv("foo_env")
os.environ["bar_env"] = os.getenv("bar_env")
os.environ["foo_pass"] = os.getenv("foo_pass")
os.environ["bar_pass"] = os.getenv("bar_pass")
if not isinstance(conf, AnalyticsConfig):
if conf is None:
conf = AnalyticsConfig(require_only=self.CONFIG_KEYS)
else:
raise TypeError("'conf' must be an AnalyticsConfig instance")
self.foo_env= conf.foo_env
self.bar_env= conf.bar_env
self.foo_pass= conf.foo_pass
self.bar_pass= conf.bar_pass
self._conf = conf
self.database = database
def sample_run(x,y):
"""Sample function to read data from a database and and returns pandas.df"""
result = read_data(self.foo_env, self.foo_pass, x, y)
return result
上述代码通过请求os.getenv 变量在常规本地测试环境中工作。当我使用 Azure 管道 中的测试用例部署此代码时,它失败了,因为管道中没有设置环境变量。我不想将变量保留在管道中,而是在这里使用 mocking/monkey patching 概念。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
如果你使用的是pytest,你可以使用monkeypatch fixture的
setenv方法。
标签: mocking pytest azure-pipelines