# laboratory
A simple, expressive unit test framework for Rust



Checkout the [documentation](https://enokson.github.io/laboratory/) and the extensive [examples](https://github.com/enokson/laboratory/tree/master/examples) over on github.
Laboratory is layer 2 test runner solution that sits on top of the Rust test runner to provide unparalleled features and ease of use.
## Features
* before_all, before_each, after_all, after_each hooks
* Different reporter options: spec, minimal, json, json-pretty, rust, dot, tap, list
* Reports test durations in: nanoseconds, microseconds, milliseconds and seconds
* The use of custom assertion libraries
* Exclude tests
* Nested test suites
* Test retry support
* The use of state
* "should panic" testing
* Console highlighting
* Dynamic testing
* Highlights slow tests
* No weird macros to try to figure out or debug!
* Human readable code and test results
## Installation
In Cargo.toml:
```toml
[dev-dependencies]
laboratory = "2.0.0"
```
Then in your test files
```rust
#[cfg(test)]
mod tests {
use laboratory::{describe, describe_skip, it, it_skip, it_only, expect};
}
```
## Getting Started
### Testing a simple function
```rust
// from examples/simple.rs
//###SIMPLE###//
```
Then run:
```shell script
$ cargo test -- --nocapture
```
Result:
```
//###SIMPLE-RESULT###//
```