pub trait DecorateTest<R>:
RefUnwindSafe
+ Send
+ Sync
+ 'static {
// Required method
fn decorate_and_test<F: TestFn<R>>(&'static self, test_fn: F) -> R;
}
Expand description
Test decorator.
See module docs for the extended description.
§Examples
The following decorator implements a #[should_panic]
analogue for errors.
use test_casing::decorators::{DecorateTest, TestFn};
#[derive(Debug, Clone, Copy)]
pub struct ShouldError(pub &'static str);
impl<E: ToString> DecorateTest<Result<(), E>> for ShouldError {
fn decorate_and_test<F: TestFn<Result<(), E>>>(
&self,
test_fn: F,
) -> Result<(), E> {
let Err(err) = test_fn() else {
panic!("Expected test to error, but it completed successfully");
};
let err = err.to_string();
if err.contains(self.0) {
Ok(())
} else {
panic!(
"Expected error message to contain `{}`, but it was: {err}",
self.0
);
}
}
}
// Usage:
#[test]
#[decorate(ShouldError("oops"))]
fn test_with_an_error() -> Result<(), Box<dyn Error>> {
Err("oops, this test failed".into())
}
Required Methods§
Sourcefn decorate_and_test<F: TestFn<R>>(&'static self, test_fn: F) -> R
fn decorate_and_test<F: TestFn<R>>(&'static self, test_fn: F) -> R
Decorates the provided test function and runs the test.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.