py.test hacks to support XFAIL/XPASS
Tests that code raises the exception expectedException.
code may be a callable, such as a lambda expression or function name.
If code is not given or None, raises will return a context manager for use in with statements; the code to execute then comes from the scope of the with.
raises() does nothing if the callable raises the expected exception, otherwise it raises an AssertionError.
Examples
>>> from sympy.utilities.pytest import raises
>>> raises(ZeroDivisionError, lambda: 1/0)
>>> raises(ZeroDivisionError, lambda: 1/2)
Traceback (most recent call last):
...
AssertionError: DID NOT RAISE
>>> with raises(ZeroDivisionError):
... n = 1/0
>>> with raises(ZeroDivisionError):
... n = 1/2
Traceback (most recent call last):
...
AssertionError: DID NOT RAISE
Note that you cannot test multiple statements via with raises:
>>> with raises(ZeroDivisionError):
... n = 1/0 # will execute and raise, aborting the ``with``
... n = 9999/0 # never executed
This is just what with is supposed to do: abort the contained statement sequence at the first exception and let the context manager deal with the exception.
To test multiple statements, you’ll need a separate with for each:
>>> with raises(ZeroDivisionError):
... n = 1/0 # will execute and raise
>>> with raises(ZeroDivisionError):
... n = 9999/0 # will also execute and raise