8 releases
0.3.5 | Jun 28, 2024 |
---|---|
0.3.4 | May 27, 2024 |
0.2.0 | May 24, 2024 |
0.1.0 | May 23, 2024 |
#131 in FFI
30KB
389 lines
pyo3-testing: A crate to make testing pyo3 wrapped functions easy in rust
Pyo3-testing is designed to save the need to continually build and install your wrapped extension modules in order to run integration tests in python.
It provides a test attribute #[pyo3test]
which allows you to shorten your tests to:
#[pyo3test]
#[pyo3import(py_adders: from adders import addone)]
fn test_pyo3test_simple_case() {
let result: isize = addone!(1);
assert_eq!(result, 2);
}
Without pyo3-testing
this test can run to over 20 lines of code and randomly fail due to issues with python interpreter pre-initialisation.
It also provides a with_py_raises!
macro modelled on pytest's with raises
context manager to test for expected Exceptions:
# use pyo3_testing::{pyo3test, with_py_raises};
#[pyo3test]
#[allow(unused_macros)]
#[pyo3import(py_adders: from adders import addone)]
fn test_raises() {
with_py_raises!(PyTypeError, { addone.call1(("4",)) });
}
For a walk-through guide to using the crate along with lots of other tips on developing rust extensions for python see: Combining rust & python - a worked example
Technical documentation for the crate is available at docs.rs
Recognition
This crate wouldn't be possible or necessary without the amazing work done by pyo3
Feedback, ideas and contributions
... are very welcome via MusicalNinjas/pyo3-testing
Dependencies
~3–12MB
~128K SLoC