【问题标题】:How to add sqlalchemy.exc.IntegrityError as side effect to mock objects?如何添加 sqlalchemy.exc.IntegrityError 作为模拟对象的副作用?
【发布时间】:2016-10-05 08:13:27
【问题描述】:

我正在测试一个需要模拟对象的函数。此对象可能会引发 IntegrityError,因此我将此错误作为副作用添加到模拟对象

def test_(self, mock_object):
        mock_object.side_effect = IntegrityError

这在某种程度上是不正确的,因为它引发了一个异常说__init__() takes at least 4 arguments (1 given) 这样做的正确方法是什么?

【问题讨论】:

  • 一如既往,包括完整的回溯,而不仅仅是错误。在这种情况下,很明显 IntegrityError.__init__ 失败了,因为模拟对象试图错误地构造它。
  • 在这种情况下,错误消息已经说明了这一点。手头的问题是如何正确构造错误。

标签: python unit-testing python-mock


【解决方案1】:

只需构建一个引发完整性错误的单行函数,并将其添加为副作用:

x = Mock()

def b():
    raise IntegrityError('Mock', 'mock', 'mock')

x.side_effect = b
x()

【讨论】:

    【解决方案2】:

    无需在单独的函数中引发异常。相反,您可以这样做:

    mock_object.method_to_mock = MagicMock(
        side_effect=IntegrityError(MagicMock(), MagicMock(), MagicMock()))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多