2017-08-22 3 views
1

をスロー:モックメソッド属性Pythonは、私は次のような方法持っAttributionError

def get_countries(cities): 
    prefix = os.getenv("PREFIX") 
    ... 
    ... 

を私はos.getenv("PREFIX")@mock.patch.dict(os.environ, {"PREFIX": "P"})に1つのキーだけを模擬する方法を見つけることができませんでしたので、私は(このprefix属性を模擬したいと思います - 希望全体の辞書を嘲笑し、私は維持したい、他のキーがあるかもしれません

だから、私は次のように書いた:。

@mock.patch.object("get_countries", "prefix", "P") 
    def test_get_aggregated_performance_records_countries_min_spend(): 
    ... 

私が手nエラー:

AttributeError: get_countries does not have the attribute 'prefix' 

私は間違っていますか?

答えて

1

prefixは、get_countries機能のプロパティではありません。それはそれはget_countriesに囲まれたが、それはget_countriesのプロパティではありませんされて:)

os.environにパッチを適用することは受け入れられない場合は、引数としてprefixを公開するためにリファクタリングができ、関数は変数のスコープです:

作る
def get_countries(cities, prefix=os.getenv("PREFIX")): 
    ... 
    ... 

単体テストの価値を提供するのは簡単です。あなたpatchos.environエド場合


さらに、それだけで現在のテストケースに影響を与える必要があります。 1回のテストで指定するキーの数はいくつですか?

+1

私はモックを使い、自分のコードをテストに変更しないことを好みます。関数スコープ変数を模擬する方法はありますか?os envに関する質問 - 今後、より多くのsys envを使用する予定がある場合は、この値を変更してもテストに影響を与えないことを意味します。 – Dejell

関連する問題