So habe ich ein SQLAlchemy Modell verspotten, die ein Ereignis-Listener hat:Python: Wie SQLAlchemy Event-Handler (mit mock.unittest)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
@event.listens_for(User, "after_insert")
@event.listens_for(User, "after_update")
def do_something(mapper, connection, self):
foo = SomeClass(self)
foo.do_something_to_database()
Und ich habe eine Unit-Test, der das Modell aktualisieren muss/einfügen
@patch('my_package.user.do_something')
def test_user(mock_do_something):
user = User() # This insert will invoke 'do_something' via the event listener.
assertSomething(user)
jedoch nicht meine Tests, weil es wie die do_something
Funktion scheint immer noch genannt wird, und nicht erfolgreich verspottet worden. Ich versuchte zu lesen, wie Patching here (es ruft diese Funktion richtig?) Und ich habe versucht, durch den SQLAlchemy-Quellcode here zu suchen, um das entsprechende Modul zu Patch (etwas wie @patch('sqlalchemy.event.registrat._listen_fn')
) zu finden, aber ohne Erfolg.
Hat jemand schon einmal das schon einmal erlebt?