2016-12-06 14 views
2

py.test monkeypatching/mocking documentationでこれは言及されていませんが、関数本体に導入されたローカル変数をmonkeypatchすることは可能ですか?関数本体に導入されたローカル変数をmonkeypatchすることは可能ですか?

私の実験:

def my_method(): 
    my_var = 'foo' 
    return my_var[:2] 

テストは次のとおりです。

def test_my_method(monkeypatch): 
    monkeypatch.setattr(my_module.MyClass.my_method.my_var, lambda: 'bar') 
    assert my_method() == 'ba' 

AttributeError: 'function' object at MyClass.my_method has no attribute 'my_var'

+1

あなたは何をしようとしているのか分かりません。あなたは、それを適用したいコードの煮詰めバージョンと同様、あなたは、monkeypatchingを試していくつかの最小限のコードを投稿することはできますか? ([mcve]を参照してください)また、あなたはサルのパッチを当てて何を達成しようとしていますか?たぶんあなたの状況に適した方法があります。 –

+0

質問のタグに[tag:py.test]があります。テスト目的でスタブ/モック/偽/ダブルを試そうとしていますか? –

+2

メソッドのローカルスコープで定義された変数は、メソッドの属性と同等ではありません。私たち[MCVE]を見せてください。 –

答えて

4

変数は事前に存在していないとpy.testは、の作成にフックすることはできませんので、これは不可能です私が知る限り、ローカル変数。

関連する問題