Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nlesc-nano/assertionlib
A package for performing assertions and providing informative exception messages.
https://github.com/nlesc-nano/assertionlib
assertion assertion-library assertions python-3 python-3-6 python-3-7 python-3-8 python-3-9 testing unit-testing
Last synced: 10 days ago
JSON representation
A package for performing assertions and providing informative exception messages.
- Host: GitHub
- URL: https://github.com/nlesc-nano/assertionlib
- Owner: nlesc-nano
- License: apache-2.0
- Created: 2019-10-10T13:00:23.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-02-05T14:49:51.000Z (12 months ago)
- Last Synced: 2025-01-18T09:45:29.390Z (16 days ago)
- Topics: assertion, assertion-library, assertions, python-3, python-3-6, python-3-7, python-3-8, python-3-9, testing, unit-testing
- Language: Python
- Homepage:
- Size: 272 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.rst
Awesome Lists containing this project
README
.. image:: https://readthedocs.org/projects/assertionlib/badge/?version=latest
:target: https://assertionlib.readthedocs.io/en/latest/
.. image:: https://badge.fury.io/py/AssertionLib.svg
:target: https://badge.fury.io/py/AssertionLib
.. image:: https://github.com/nlesc-nano/AssertionLib/workflows/Python%20package/badge.svg
:target: https://github.com/nlesc-nano/AssertionLib/actions
.. image:: https://codecov.io/gh/nlesc-nano/AssertionLib/branch/master/graph/badge.svg
:target: https://codecov.io/gh/nlesc-nano/AssertionLib
.. image:: https://zenodo.org/badge/214183943.svg
:target: https://zenodo.org/badge/latestdoi/214183943|
.. image:: https://img.shields.io/badge/python-3.6-blue.svg
:target: https://docs.python.org/3.6/
.. image:: https://img.shields.io/badge/python-3.7-blue.svg
:target: https://docs.python.org/3.7/
.. image:: https://img.shields.io/badge/python-3.8-blue.svg
:target: https://docs.python.org/3.8/
.. image:: https://img.shields.io/badge/python-3.9-blue.svg
:target: https://docs.python.org/3.9/
.. image:: https://img.shields.io/badge/python-3.10-blue.svg
:target: https://docs.python.org/3.10/
.. image:: https://img.shields.io/badge/python-3.11-blue.svg
:target: https://docs.python.org/3.11/############
AssertionLib
############
A package for performing assertions and providing informative exception messages.Installation
************
* PyPi: ``pip install AssertionLib``
* GitHub: ``pip install git+https://github.com/nlesc-nano/AssertionLib``Usage
*****
A comprehensive overview of all available assertion methods is
provided in the documentation_.
A few examples of some basic assertion:.. code:: python
>>> import numpy as np
>>> from assertionlib import assertion# Assert the output of specific callables
>>> assertion.eq(5, 5) # 5 == 5
>>> assertion.lt(5, 6) # 5 < 6
>>> assertion.gt(6, 5) # 5 > 6
>>> assertion.isinstance(5, int)
>>> assertion.hasattr(5, '__init__')
>>> assertion.any([False, False, True])
>>> assertion.isfinite(1.0)# Simply assert a value
>>> assertion(5 == 5)
>>> assertion(isinstance(5, int))# Apply post-processing before conducting the assertion
>>> ar_large = np.ones(10)
>>> ar_small = np.zeros(10)
>>> assertion.gt(ar_large, ar_small, post_process=np.all) # all(ar_large > ar_small)# Perform an assertion which will raise an AssertionError
>>> assertion.eq(5, 6, message='Fancy custom error message') # 5 == 6
Traceback (most recent call last):
...
AssertionError: output = eq(a, b); assert outputexception: AssertionError = AssertionError('Fancy custom error message')
output: bool = False
a: int = 5
b: int = 6A few examples of AssertionErrors raised due to incorrect method signatures:
.. code:: python
>>> from assertionlib import assertion
>>> assertion.len(5)
Traceback (most recent call last):
...
AssertionError: output = len(obj); assert outputexception: TypeError = TypeError("object of type 'int' has no len()")
output: NoneType = None
obj: int = 5.. code:: python
>>> from assertionlib import assertion
>>> assertion.eq(5, 5, 5, 5)
Traceback (most recent call last):
...
AssertionError: output = eq(a, b, _a, _b); assert outputexception: TypeError = TypeError('eq expected 2 arguments, got 4')
output: NoneType = None
a: int = 5
b: int = 5
_a: int = 5
_b: int = 5A demonstration of the ``exception`` parameter.
Providing an exception type will assert that the provided exception is raised
during/before the assertion process:.. code:: python
>>> from assertionlib import assertion
>>> len(5)
Traceback (most recent call last):
...
TypeError: object of type 'int' has no len().. code:: python
>>> from assertionlib import assertion
>>> assertion.len(5, exception=TypeError) # i.e. len(5) should raise a TypeError
>>> assertion.len([5], exception=TypeError)
Traceback (most recent call last):
...
AssertionError: output = len(obj); assert outputexception: AssertionError = AssertionError("Failed to raise 'TypeError'")
output: int = 1
obj: list = [5]Lastly, the output of custom callables can be asserted in one of the following two ways,
supplying the callable to ``AssertionManager.assert()`` or creating a custom assertion
method and adding it to an instance with ``AssertionManager.add_to_instance()``:.. code:: python
>>> from assertionlib import assertion
>>> def my_fancy_func(a: object) -> bool:
... return False# Approach #1, supply to-be asserted callable to assertion.assert_()
>>> assertion.assert_(my_fancy_func, 5)
Traceback (most recent call last):
...
AssertionError: output = my_fancy_func(a); assert outputexception: AssertionError = AssertionError(None)
output: bool = False
a: int = 5.. code:: python
>>> from assertionlib import assertion
# Approach #2, permanantly add a new bound method using assertion.add_to_instance()
>>> assertion.add_to_instance(my_fancy_func)
>>> assertion.my_fancy_func(5)
Traceback (most recent call last):
...
AssertionError: output = my_fancy_func(a); assert outputexception: AssertionError = AssertionError(None)
output: bool = False
a: int = 5.. _documentation: https://assertionlib.readthedocs.io/en/latest/3_assertionmanager.html