2

モジュールを使用しているコードをテストするために、特定のモジュールをモックしたいと思います。

つまり、my_moduleテストしたいモジュールがあります。my_module外部モジュールreal_thingをインポートして呼び出しますreal_thing.compute_something():

#my_module
import real_thing
def my_function():
    return real_thing.compute_something()

real_thingテストでfake_thing、私が作成したモジュールのように動作するようにモックする必要があります。

#fake_thing
def compute_something():
    return fake_value

テスト呼び出しは次my_module.my_function()を呼び出しますreal_thing.compute_something():

#test_my_module
import my_module
def test_my_function():
    assert_something(my_module.my_function())

の代わりにテスト内でmy_function()呼び出すには、テスト コードに何を追加すればよいですか?fake_thing.compute_something()real_thing.compute_something()

私はMockでこれを行う方法を理解しようとしていましたが、そうではありませんでした。

4

2 に答える 2

1

単にいいえ?sys.modules をハックする

#fake_thing.py
def compute_something():
    return 'fake_value'

#real_thing.py
def compute_something():
    return 'real_value'

#my_module.py
import real_thing
def my_function():
    return real_thing.compute_something()

#test_my_module.py
import sys

def test_my_function():
    import fake_thing
    sys.modules['real_thing'] = fake_thing
    import my_module
    print my_module.my_function()

test_my_function()

出力: 'fake_value'

于 2012-08-29T20:29:20.637 に答える
0

http://code.google.com/p/mockito-python/

>>> from mockito import *
>>> dog = mock()
>>> when(dog).bark().thenReturn("wuff")
>>> dog.bark()
'wuff'

http://technogeek.org/python-module.html - モジュールを動的に置換、ロードする方法

于 2012-08-29T19:13:36.633 に答える