Python Tests That Write Themselves
source link: https://www.tuicool.com/articles/ZvAJnq2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Home
Read Latest Documentation - Browse GitHub Code Repository
hypothesis-autois an extension for the Hypothesis project that enables fully automatic tests for type annotated functions.
Key Features:
- Type Annotation Powered : Utilize your function's existing type annotations to build dozens of test cases automatically.
- Low Barrier : Start utilizing property-based testing in the lowest barrier way possible. Just run
auto_test(FUNCTION)
to run dozens of test. - py.test Compatible : Built-in compatibility with the popular py.test testing framework. This means that you can turn your automatically generated tests into individual py.test test cases with one line.
- Scales Up : As you find your self needing to customize your auto_test cases, you can easily utilize all the features of Hypothesis , including custom strategies per a parameter.
Installation:
To get started - install hypothesis-auto
into your projects virtual environment:
pip3 install hypothesis-auto
OR
poetry add hypothesis-auto
OR
pipenv install hypothesis-auto
Usage Examples:
Framework independent usage
Basic auto_test
usage:
from hypothesis_auto import auto_test def add(number_1: int, number_2: int = 1) -> int: return number_1 + number_2 auto_test(add) # 50 property based scenerios are generated and ran against add auto_test(add, _auto_runs=1_000) # Let's make that 1,000
Adding an allowed exception:
from hypothesis_auto import auto_test def divide(number_1: int, number_2: int) -> int: return number_1 / number_2 auto_test(divide) -> 1012 raise the_error_hypothesis_found 1013 1014 for attrib in dir(test): <ipython-input-2-65a3aa66e9f9> in divide(number_1, number_2) 1 def divide(number_1: int, number_2: int) -> int: ----> 2 return number_1 / number_2 3 0/0 ZeroDivisionError: division by zero auto_test(divide, _auto_allow_exceptions=(ZeroDivisionError, ))
For the full set of parameters, you can pass into auto_test see its API reference documentation .
py.test usage
Using auto_pytest_magic
to auto-generate dozens of py.test test cases:
from hypothesis_auto import auto_pytest_magic def add(number_1: int, number_2: int = 1) -> int: return number_1 + number_2 auto_pytest_magic(add)
Using auto_pytest
to run dozens of test case within a temporary directory:
from hypothesis_auto import auto_pytest def add(number_1: int, number_2: int = 1) -> int: return number_1 + number_2 @auto_pytest() def test_add(test_case, tmpdir): tmpdir.mkdir().chdir() test_case()
For the full reference of the py.test integration API see the API reference documentation .
Why Create hypothesis-auto?
I wanted a no/low resistance way to start incorporating property-based tests across my projects. Such a solution that also encouraged the use of type hints was a win/win for me.
I hope you too find hypothesis-auto
useful!
~Timothy Crosley
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK