Getting started
Cargo
To the [dev-dependencies]
section of your Cargo.toml
, add
proptest-derive = "0.2.0"
In a Rust 2015 crate, you must add
#[cfg(test)] extern crate proptest;
to the top of the crate.
About Versioning
proptest-derive
is currently experimental and has its own version. Once it is
more stable, it will be versioned in lock-step with the main proptest
crate.
Using derive
Inside any of your test modules, you can simply add #[derive(Arbitrary)]
to a
struct or enum declaration.
#![allow(unused)] fn main() { #[cfg(test)] mod test { use proptest::prelude::*; use proptest_derive::Arbitrary; #[derive(Arbitrary, Debug)] struct MyStruct { // ... } proptest! { #[test] fn test_one(my_struct: MyStruct) { // ... } // Equivalent to the above fn test_two(my_struct in any::<MyStruct>()) { // ... } } } }
In order to use proptest-derive
on a type not in a test module without also
depending on proptest for your main build, you must currently manually gate off
the related annotations. This is something we plan to improve in the
future.
#![allow(unused)] fn main() { #[cfg(test)] use proptest_derive::Arbitrary; #[derive(Debug)] // derive(Arbitrary) is only available in tests #[cfg_attr(test, derive(Arbitrary))] struct MyStruct { // Attributes consumed proptest-derive must not be added when the // declaration is not being processed by derive(Arbitrary). #[cfg_attr(test, proptest(value = 42))] answer: u32, // ... } }