2016-07-05 3 views
1

私はこれらのファイルを持っている: Pythonで別のクラスからインポートしたクラスメソッドの戻り値をモックする方法は?

from foo2 import Foo2 

class Foo(object): 

    def GetFoo2(self): 
     f = Foo2() 
     return f.Get() 

とfoo2.pyで

、私が持っている:foo.pyで

/foo.py 
/foo2.py 
/test_food.py 

を、私はこれを持っている

class Foo2(object): 

    def __init__(self): 
     self.myvar = "eeee" 

    def Get(self): 
     return self.myvar 

test_foo.pyで、

import os, sys, json, pytest 
from mock import * 
from foo import Foo 

def test_foo_ok(monkeypatch): 

    monkeypatch.setattr(Foo, "GetFoo2", lambda x:"abc") 
    f = Foo() 
    result = f.GetFoo2() 
    assert result == "abc" 

だから、test_foo.pyでは、メソッドGetFoo2()を模擬したり、モンキーにしたりできます。しかし、その代わりに、foo2のGet()メソッドの戻り値をfoo.pyとfoo2.pyのコードを変更せずに、test_foo.pyからどうやって嘲ることができますか?

答えて

0

fromを使用してインポートするたびに、そのモジュールのネームスペースにパッチを当てることができます。ここにあなたのtest_foo_ok関数の例です。

import os, sys, json, pytest 
from mock import * 
from foo import Foo 

def test_foo_ok(monkeypatch): 
    monkeypatch.setattr("foo.Foo2.Get", lambda x:"abc") 
    f = Foo() 
    result = f.GetFoo2() 
    assert result == "abc" 

は、より多くの詳細については、モックライブラリのドキュメントのwhere to patchセクションを参照してください。 pytestのmonkeypatchにも同じ規則が適用されます。

+0

私はそれを試してみましたし、私はmonkeypatch.setattr(...)で、このエラーを得た: はImportError:pytestのFOO – murvinlai

+0

@murvinlaiどのバージョンという名前のモジュール?私は2.9.1でこれを説明した名前の他のファイルを使ってテストしました。 – jordanm

関連する問題