This crate is meant to be used as a dev dependency. Its purpose is to provides the testing support to help reduce boilerplate, duplication, and provides standardization. The following macros are provided: - [op_tests_mod](https://docs.rs/oysterpack_testing/macro.op_tests_mod.html) - provides support to configure logging for tests - logs test execution time - [op_test](https://docs.rs/oysterpack_testing/macro.op_test.html) - used to generate test functions that leverage the `tests` module generated by [op_tests_mod!()](macro.op_tests_mod.html) ## Example ```rust #[cfg(test)] #[macro_use] extern crate oysterpack_testing; #[cfg(test)] op_tests_mod!(); #[cfg(test)] mod foo_test { // the macro creates a test function named 'foo' op_test!(foo, { info!("SUCCESS"); }); #[test] fn foo_test() { // alternatively use ::run_test("test name",|| { // test code }) ::run_test("foo_test", || { // by default the crate's log level is set to Debug debug!("SUCCESS") }); } } ``` ## Example - configuring target log levels ```rust #[cfg(test)] #[macro_use] extern crate oysterpack_testing; #[cfg(test)] op_tests_mod! { "foo" => Info, "bar" => Error } #[cfg(test)] mod foo_test { op_test!(foo, { info!("this will be logged because this crate's log level is Debug"); info!(target: "foo", "foo info will be logged"); info!(target: "bar", "*** bar info will not be logged ***"); error!(target: "bar", "bar error will be logged"); }); #[test] fn foo_test() { ::run_test("foo_test", || { debug!("SUCCESS") }); } } ``` ## Notes - the log, fern, and chrono crates are re-exported because they are used by the macros. Re-exporting them makes the macros self-contained.