2016-09-26 3 views
1

次のコードを検討してください。次のように私はfoo.verify_client()Pythonで自己を模倣する方法は?

import unittest 
import mock 

def mock_get_value(self, value): 
    return 'client' 

class Foo: 
    def __init__(self): 
     pass 
    def get_value(self, value): 
     return value 
    def verify_client(self): 
     client = self.get_value('client') 
     return client == 'client' 

class testFoo(unittest.TestCase): 
    @mock.patch('self.get_value', side_effect = mock_get_value, autospec = True) 
    def test_verify_client(self): 
     foo = Foo() 
     result = foo.verify_client() 
     self.assertTrue(result) 

if __name__ == "__main__": 
    unittest.main() 

に呼び出されself.get_valueを、モックとしたい。しかし、私は失敗し、エラーがあります。

E 
====================================================================== 
ERROR: test_verify_client (__main__.testFoo) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/apps/Python/lib/python2.7/site-packages/mock/mock.py", line 1297, in patched 
    arg = patching.__enter__() 
    File "/apps/Python/lib/python2.7/site-packages/mock/mock.py", line 1353, in __enter__ 
    self.target = self.getter() 
    File "/apps/Python/lib/python2.7/site-packages/mock/mock.py", line 1523, in <lambda> 
    getter = lambda: _importer(target) 
    File "/apps/Python/lib/python2.7/site-packages/mock/mock.py", line 1206, in _importer 
    thing = __import__(import_path) 
ImportError: No module named self 

---------------------------------------------------------------------- 
Ran 1 test in 0.001s 

FAILED (errors=1) 

どうすればいいですか?

答えて

1

私はそれを理解しました。

@mock.patch('test.Foo.get_value', mock_get_value) 

にこのライン

@mock.patch('self.get_value', side_effect = mock_get_value, autospec = True) 

を変更働きました。

特に、パッチされた関数の形式は、module_name + class_name + method_name

である必要があります。
関連する問題