pytest¶
py.test hacks to support XFAIL/XPASS
- sympy.testing.pytest.ignore_warnings(warningcls)[source]¶
Context manager to suppress warnings during tests.
This function is useful for suppressing warnings during tests. The warns function should be used to assert that a warning is raised. The ignore_warnings function is useful in situation when the warning is not guaranteed to be raised (e.g. on importing a module) or if the warning comes from third-party code.
When the warning is coming (reliably) from SymPy the warns function should be preferred to ignore_warnings.
>>> from sympy.testing.pytest import ignore_warnings >>> import warnings
Here’s a warning:
>>> with warnings.catch_warnings(): # reset warnings in doctest ... warnings.simplefilter('error') ... warnings.warn('deprecated', UserWarning) Traceback (most recent call last): ... UserWarning: deprecated
Let’s suppress it with ignore_warnings:
>>> with warnings.catch_warnings(): # reset warnings in doctest ... warnings.simplefilter('error') ... with ignore_warnings(UserWarning): ... warnings.warn('deprecated', UserWarning)
(No warning emitted)
- sympy.testing.pytest.nocache_fail(func)[source]¶
Dummy decorator for marking tests that fail when cache is disabled
- sympy.testing.pytest.raises(expectedException, code=None)[source]¶
Tests that
coderaises the exceptionexpectedException.codemay be a callable, such as a lambda expression or function name.If
codeis not given or None,raiseswill return a context manager for use inwithstatements; the code to execute then comes from the scope of thewith.raises()does nothing if the callable raises the expected exception, otherwise it raises an AssertionError.Examples
>>> from sympy.testing.pytest import raises
>>> raises(ZeroDivisionError, lambda: 1/0) <ExceptionInfo ZeroDivisionError(...)> >>> raises(ZeroDivisionError, lambda: 1/2) Traceback (most recent call last): ... Failed: DID NOT RAISE
>>> with raises(ZeroDivisionError): ... n = 1/0 >>> with raises(ZeroDivisionError): ... n = 1/2 Traceback (most recent call last): ... Failed: 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
withis 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
withfor each:>>> with raises(ZeroDivisionError): ... n = 1/0 # will execute and raise >>> with raises(ZeroDivisionError): ... n = 9999/0 # will also execute and raise
- sympy.testing.pytest.warns(warningcls, *, match='')[source]¶
Like raises but tests that warnings are emitted.
>>> from sympy.testing.pytest import warns >>> import warnings
>>> with warns(UserWarning): ... warnings.warn('deprecated', UserWarning)
>>> with warns(UserWarning): ... pass Traceback (most recent call last): ... Failed: DID NOT WARN. No warnings of type UserWarning was emitted. The list of emitted warnings is: [].
- sympy.testing.pytest.warns_deprecated_sympy()[source]¶
Shorthand for
warns(SymPyDeprecationWarning)This is the recommended way to test that
SymPyDeprecationWarningis emitted for deprecated features in SymPy. To test for other warnings usewarns. To suppress warnings without asserting that they are emitted useignore_warnings.>>> from sympy.testing.pytest import warns_deprecated_sympy >>> from sympy.utilities.exceptions import SymPyDeprecationWarning >>> with warns_deprecated_sympy(): ... SymPyDeprecationWarning("Don't use", feature="old thing", ... deprecated_since_version="1.0", issue=123).warn()
>>> with warns_deprecated_sympy(): ... pass Traceback (most recent call last): ... Failed: DID NOT WARN. No warnings of type SymPyDeprecationWarning was emitted. The list of emitted warnings is: [].