python – 使用SQLAlchemy防止在单元测试期间触摸数据库

前端之家收集整理的这篇文章主要介绍了python – 使用SQLAlchemy防止在单元测试期间触摸数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我已经使用Django好几年了,但最近决定尝试使用Flask来获得新的API.感谢Carl Meyers在PyCon上testing Django的精彩演示,我一直在使用以下技术来防止在我的Django单元测试中触摸数据库

  1. cursor_wrapper = Mock()
  2. cursor_wrapper.side_effect = RuntimeError("No touching the database!")
  3. @patch('django.db.backends.util.CursorWrapper',cursor_wrapper)
  4. class TestPurchaseModel(TestCase):
  5. '''Purchase model test suite'''
  6. ...

我的问题是,任何人都可以告诉我如何使用sqlAlchemy执行相同的基本技术吗?换句话说,我希望任何时候我实际上对数据库运行查询以产生运行时错误.

最佳答案
您可以使用sqlAlchemy的event system,这允许您在sqlAlchemy执行不同事件时使用回调.

在您的情况下,您可能希望使用before_execute()before_cursor_execute()事件.例如…

  1. from sqlalchemy import event
  2. class TestCase(unittest.TestCase):
  3. def setUp(self):
  4. engine = ... # create or access your engine somehow
  5. event.listen(engine,"before_cursor_execute",self._before_cursor_execute)
  6. # We can also clean up the event handler after the test if we want to
  7. def tearDown(self):
  8. engine = ... # access your engine again
  9. event.remove(engine,self._before_cursor_execute)
  10. def _before_cusor_execute(self,conn,cursor,statement,parameters,context,executemany):
  11. raise RuntimeError('No touching the database!')

猜你在找的Python相关文章