'python - assert_called_with where AttributeError is passed as arg

I am trying to unit test a custom exception called TargetException.

One of the arguments to this exception is itself an exception.

Here's the relevant part of my test:

mock_exception.assert_called_once_with(
    id,
    AttributeError('invalidAttribute',)
)

Here's the test failure message:

  File "/usr/local/lib/python2.7/site-packages/mock/mock.py", line 948, in assert_called_once_with
    return self.assert_called_with(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/mock/mock.py", line 937, in assert_called_with
    six.raise_from(AssertionError(_error_message(cause)), cause)
  File "/usr/local/lib/python2.7/site-packages/six.py", line 718, in raise_from
    raise value
AssertionError: Expected call: TargetException(<testrow.TestRow object at 0x7fa2611e7050>, AttributeError('invalidAttribute',))
Actual call: TargetException(<testrow.TestRow object at 0x7fa2611e7050>, AttributeError('invalidAttribute',))

In both the "Expected call" and the "Action call," the same arguments are present -- at least it appears that way to me.

Do I need to pass the AttributeError a different way to resolve the error?



Solution 1:[1]

Building on top of MrBean Bremen's answer.

Another way to solve this is to hold the exception in a var and check on the var:

ex = AttributeError('invalidAttribute',)
...
def foo():
    raise ex
...
mock_exception.assert_called_once_with(
    id,
    ex
)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ssppjj