https://github.com/python-trio/hypothesis-trio
Hypothesis plugin for trio
https://github.com/python-trio/hypothesis-trio
Last synced: 6 months ago
JSON representation
Hypothesis plugin for trio
- Host: GitHub
- URL: https://github.com/python-trio/hypothesis-trio
- Owner: python-trio
- License: mpl-2.0
- Created: 2018-07-16T17:17:53.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-12-13T12:46:22.000Z (about 4 years ago)
- Last Synced: 2025-06-09T18:11:31.668Z (7 months ago)
- Language: Python
- Size: 104 KB
- Stars: 7
- Watchers: 3
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.rst
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
===============
hypothesis-trio
===============
.. image:: https://github.com/python-trio/hypothesis-trio/actions/workflows/ci.yml/badge.svg?branch=master
:target: https://github.com/python-trio/hypothesis-trio/actions/workflows/ci.yml
.. image:: https://codecov.io/gh/python-trio/hypothesis-trio/branch/master/graph/badge.svg
:target: https://codecov.io/gh/python-trio/hypothesis-trio
Welcome to `hypothesis-trio `__!
Hypothesis supports Trio out of the box for non-stateful tests.
This project aims at supporting the stateful mode ;-)
License: Your choice of MIT or Apache License 2.0
Usage
=====
Replace ``hypothesis.stateful.RuleBasedStateMachine`` by ``hypothesis_trio.stateful.TrioRuleBasedStateMachine``:
.. code-block:: python
from hypothesis_trio.stateful import Bundle, TrioRuleBasedStateMachine, run_state_machine_as_test
def test_trio_number_modifier(hypothesis_settings):
class NumberModifier(TrioRuleBasedStateMachine):
folders = Bundle('folders')
files = Bundle('files')
@initialize(target=folders)
async def init_folders(self):
await trio.sleep(0)
return '/'
@rule(target=folders, name=name_strategy)
async def create_folder(self, parent, name):
await trio.sleep(0)
return '%s/%s' % (parent, name)
@rule(target=files, name=name_strategy)
async def create_file(self, parent, name):
await trio.sleep(0)
return '%s/%s' % (parent, name)
async def teardown(self):
await trio.sleep(0)
run_state_machine_as_test(NumberModifier, settings=hypothesis_settings)
Support for Trio-Asyncio
=========================
`trio-asyncio `__ allows to mix asyncio and trio code altogether.
To support it in your test, you should use ``hypothesis_trio.stateful.TrioAsyncioRuleBasedStateMachine``:
.. code-block:: python
class CheckAsyncioLoop(TrioAsyncioRuleBasedStateMachine):
@initialize()
async def initialize(self):
assert self.get_asyncio_loop() == asyncio.get_event_loop()
await trio_asyncio.aio_as_trio(lambda: asyncio.sleep(0))