#parameterized #parametrized #test #unit-test #test-case

dev yare

Lean library for writing parameterized test cases in Rust 💖

4 stable releases

2.0.0 Oct 15, 2023
1.0.2 Aug 19, 2022
1.0.1 Feb 22, 2021
1.0.0 Dec 30, 2020

#111 in Testing

Download history 1379/week @ 2023-10-28 1094/week @ 2023-11-04 1725/week @ 2023-11-11 1069/week @ 2023-11-18 1004/week @ 2023-11-25 1194/week @ 2023-12-02 1790/week @ 2023-12-09 614/week @ 2023-12-16 486/week @ 2023-12-23 1753/week @ 2023-12-30 1434/week @ 2024-01-06 1049/week @ 2024-01-13 1178/week @ 2024-01-20 1118/week @ 2024-01-27 1194/week @ 2024-02-03 1362/week @ 2024-02-10

4,931 downloads per month
Used in 23 crates

MIT/Apache

11KB
104 lines

Yare

Procedural macro based parameterized testing library. Run a test case with many different inputs. Test cases can be defined using the 'parameterized' attribute instead of the 'test' attribute.

Examples:


Example: Add5

fn add5<T: Into<u32>>(component: T) -> u32 {
    component.into() + 5
}

#[cfg(test)]
mod tests {
    use super::*;
    use yare::parameterized;
    
    #[parameterized(
        zero_plus_five = { 0, 5 },
        one_plus_five = { 1, 6 },
        two_plus_five = { 2, 7 },
    )]
    fn test_add5(input: u16, expected: u32) {
        assert_eq!(add5(input), expected);
    }
}

Example: Fruits

enum Fruit {
    Apple,
    Bramble(BrambleFruit),
    Pear,
}

trait NameOf {
    fn name_of(&self) -> &str;
}

impl NameOf for Fruit {
    fn name_of(&self) -> &str {
        match self {
            Fruit::Apple => "apple",
            Fruit::Bramble(fruit) => fruit.name_of(),
            Fruit::Pear => "pear",
        }
    }
}

enum BrambleFruit {
    Blackberry,
}

impl NameOf for BrambleFruit {
    fn name_of(&self) -> &str {
        match self {
            BrambleFruit::Blackberry => "blackberry",
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use yare::parameterized;
    
    #[parameterized(
        apple = { Fruit::Apple, "apple" },
        pear = { Fruit::Pear, "pear" },
        blackberry = { Fruit::Bramble(BrambleFruit::Blackberry), "blackberry" },
    )]
    fn a_fruity_test(fruit: Fruit, name: &str) {
        assert_eq!(fruit.name_of(), name)
    }
}

Imports

If you prefer not to import this library (with use yare::parameterized;) in every test module, you can put the following snippet at the top of your crate root:

#[cfg(test)]
#[macro_use]
extern crate yare;

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~290–730KB
~17K SLoC