# A simple `pytest` clone for Rust

`rstest` use procedural macro to implement simple fixtures and table based tests.
To use it you need at least 1.30 toolchain (beta channel till 2018-10-25)
and add follow lines to your `Cargo.toml` file:

```
[dev-dependencies]
rstest = "0.2"
```

The core idea is that every input arguments of your test function will
be resolved by call a function with the same name. You can also use
`mut` argument or generic types.

Example:

```rust
#[cfg(test)]
extern crate rstest;

use rstest::rstest;

pub fn fixture() -> u32 { 42 }

#[rstest]
fn should_success(fixture: u32) {
    assert_eq!(fixture, 42);
}

#[rstest]
fn should_fail(fixture: u32) {
    assert_ne!(fixture, 42);
}
```

Moreover you can use `rstest_parametrize` attribute to implement table
based tests.  An example is the best way to explain it

```rust
#[cfg(test)]
extern crate rstest;

use rstest::rstest_parametrize;

#[rstest_parametrize(
    expected, input,
    case(4, "ciao"),
    case(3, "Foo")
)]
fn strlen_test(expected: usize, input: &str) {
    assert_eq!(expected, input.len());
}
```

You can find more examples in `resources` directory and in [`rs8080`](https://github.com/la10736/rs8080) that use this module intensely.

## License

Licensed under either of

* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)

* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)

at your option.

