我创建了一个装饰器,只允许在特定环境中运行函数:
def accepted_environments(*envs):
"""
The decorated function can be executed only in specified envs
"""
def my_decorator(func_to_be_decorated):
def wrapper():
if settings.ENV_NAME not in envs:
raise EnvironmentException
return func_to_be_decorated()
return wrapper
return my_decorator
# Usage example
@accepted_environments('local', 'prod')
def hello():
print("hello")
这似乎有效,但我想对它进行单元测试。 问题是:我的测试可以在每个环境(本地,分期,产品)中运行。另外,我认为我的测试能够改变环境变量并不安全。
我应该“嘲笑”这种行为吗?你会怎么做?谢谢!
答案 0 :(得分:3)
使用mock
覆盖测试的settings.ENV_NAME
值。
def test_not_in_dev(self):
with mock.patch.dict(settings.__dict__, ENV_NAME="dev"):
self.assertRaises(EnvironmentException, hello)