我有一个SQLAlchemy模型,其中包含一个事件监听器:
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()
我有一个单元测试需要更新/插入模型。
@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)
然而,我的测试失败了,因为似乎
do_something
函数仍在被调用,并且没有成功地进行模拟。我尝试阅读如何修补这里(它正在调用这个函数吗?),并且我已经尝试查看SQLAlchemy源代码这里来找到适当的模块进行修补(例如@patch('sqlalchemy.event.registrat._listen_fn')
),但是都没有成功。
有人遇到过这种情况吗?