Crates.io | parameterized_test |
lib.rs | parameterized_test |
version | 0.2.1 |
source | src |
created_at | 2020-12-01 11:57:03.609542 |
updated_at | 2022-12-10 19:26:03.513267 |
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",
}
}