OK,
Ich weiß, dass dies in der manual erwähnt wird, und wahrscheinlich mit side_effect
und/oder return_value
zu tun hat, aber ein einfaches, direktes Beispiel wird mir immens helfen.Wie spionieren Sie eine Python-Klasse und erhalten Sie für jede Instanz ein neues Mock-Objekt?
ich habe:
class ClassToPatch():
def __init__(self, *args):
_do_some_init_stuff()
def some_func():
_do_stuff()
class UUT():
def __init__(self, *args)
resource_1 = ClassToPatch()
resource_2 = ClassToPatch()
Nun, ich Komponententest die UUT
Klasse wollen, und verspotten die ClassToPatch
. Wenn man die UUT
Klasse kennt, werden genau zwei ClassToPatch
Objekte instanziiert. Ich möchte, dass das Mock-Framework ein neues Mock-Objekt für jede Instantiierung zurückgibt, so dass ich später die Aufrufe für jede separat aktivieren kann.
Wie erreiche ich dies mit dem @patch
Dekorateur in einem Testfall? Nämlich, wie das folgende Codebeispiel zu beheben?
class TestCase1(unittest.TestCase):
@patch('classToPatch.ClassToPatch',autospec=True)
def test_1(self,mock1,mock2):
_assert_stuff()
(Neu Python :) Jede Art und Weise, dies zu ändern, unter Python 2.7 zu arbeiten? –
Ich habe gerade diesen Code in Python 2.7.9 (win32) ausgeführt und es hat gut funktioniert. Welchen Fehler bekommst du? – srgerg
~ $ python --version Python 2.7.5 AttributeError: hat nicht das Attribut 'ClassToPatch' –