我有以下方法:
def get_countries(cities):
prefix = os.getenv("PREFIX")
...
...
我想模拟这个前缀属性(因为我没有找到一种方法来模拟os.getenv("PREFIX")
和@mock.patch.dict(os.environ, {"PREFIX": "P"})
中的一个键 - 会模拟整个dict并且可能有其他键我想保留。
所以我写了以下内容:
@mock.patch.object("get_countries", "prefix", "P")
def test_get_aggregated_performance_records_countries_min_spend():
...
我收到错误:
AttributeError: get_countries does not have the attribute 'prefix'
我做错了什么?
答案 0 :(得分:1)
prefix
不是get_countries
函数的属性。它是一个函数范围的变量,它包含在get_countries
中,但它不是get_countries
的属性:)
如果修补os.environ
是不可接受的,您可以重构以prefix
作为参数:
def get_countries(cities, prefix=os.getenv("PREFIX")):
...
...
使得为单元测试提供值非常简单。
此外,如果您patch
编辑os.environ
,则只会影响当前的测试用例。您需要为单个测试指定多少个键?