テストしようとしているクラスでインスタンス化されたクラスにパッチを適用しようとしていますが、動作しません。私は様々な文書を読んだが、私が間違っていることはまだ見つけていない。ここでは、コードスニペットは次のとおりです。tests/Test.py
でunittestを使用して、テスト済みのクラスによってインスタンス化されたクラスをパッチできません。
:
module/ClassToPatch.py
で
from module.ClassToTest import ClassToTest
class Test(object):
@mock.patch('module.ClassToPatch.ClassToPatch', autospec = False)
def setUp(self, my_class_mock):
self.instance = my_class_mock.return_value
self.instance.my_method.return_value = "def"
self.class_to_test = ClassToTest()
def test(self):
val = self.class_to_test.instance.my_method() #Returns 'abc' instead of 'def'
self.assertEqual(val, 'def')
:
module/ClassToTest.py
で
class ClassToPatch(object):
def __init__(self):
pass
def my_method(self):
return "abc"
:
from module.ClassToPatch import ClassToPatch
class ClassToTest(object):
def __init__:
# Still instantiates the concrete class instead of the mock
self.instance = ClassToPatch()
私はこのケースでは、私は簡単に注入することも可能だろうこれは単なる例に過ぎません。また、ファイルごとに1つのクラスポリシーを使用します。ファイルはクラスのように指定されているため、インポートの名前は変わっています。
@ mock.patch( 'module.ClassToTest.ClassToPatch'、autospec = False)を試してください –
今後サンプルコードを[MCVE](http://stackoverflow.com/help/mcve)にしてください。あなたの投稿されたコードにいくつかのバグがあったので、すぐに問題を見つけて解決策を提示するために、問題に精通している人に頼ることはできません。 –
よろしくお願いします – sixtstorm1