| Crates.io | parameterized_test |
| lib.rs | parameterized_test |
| version | 0.2.1 |
| created_at | 2020-12-01 11:57:03.609542+00 |
| updated_at | 2022-12-10 19:26:03.513267+00 |
| description | A macro to support providing arguments to test functions. |
| homepage | |
| repository | https://github.com/dimo414/parameterized_test |
| max_upload_size | |
| id | 318555 |
| size | 8,617 |
parameterized_test::create!() macroThis small crate provides a parameterized_test::create!() macro to simplify creating repeated
tests with different arguments.
Inspired by Chris Morgan's StackOverflow post and originally documented in this answer, this macro works by dynamically generating a new macro which, in turn, generates separate tests for each test case passed to the generated macro.
Note: the exact API is still in development and may change in subsequent (pre-1.0) releases.
parameterized_test::create() expects four arguments:
foo or (bar, baz) (note multiple variables must be
parenthesized).{ ... }.This example creates two test cases, tests::even::bad_case and tests::even::good_case.
use parameterized_test::create;
#[cfg(test)]
mod tests {
use super::*;
parameterized_test::create!{ even, n, { assert_eq!(n % 2, 0); } }
even! {
bad_case: 1, // this test case will fail
good_case: 2,
}
}
Tests can also specify multiple parameters:
use parameterized_test::create;
#[cfg(test)]
mod tests {
use super::*;
parameterized_test::create!{ commutative, (i, j, k), {
assert_eq!(i, j);
assert_eq!(j, k);
assert_eq!(k, i);
}}
commutative! {
small: (1, 1, 1),
large: (100, 100, 100),
}
}
The ? operator is also supported, similar to
standalone tests:
use parameterized_test::create;
#[cfg(test)]
mod tests {
use super::*;
parameterized_test::create!{ socket, path, {
let socket: SocketAddr = fs::read_to_string(path)?.parse()?;
assert_eq!(socket.is_ipv6(), true);
}}
socket! {
relative: "foo.txt",
absolute: "/tmp/bar.txt",
}
}