[][src]Attribute Macro ntest_test_cases::test_case

#[test_case]

Test cases can be used to have multiple inputs for a given function. With the #[test_case] attribute multiple tests will be generated using the Procedural Macros capabilities of rust.

The function input can be of type int, bool, or str.

Please note that test functions can only contain alphanumeric characters and '' signs. Special characters will be escaped using the '' sign.

WARNING! It is currently not possible to have negative numbers as macro input. For example this #[test_case(-13)] will not work.

A function annoteded with a #[test_case] attribute will be split into multiple rust functions annoteded with the #[test] attribute.

Examples

Example with a single argument

This example is not tested
#[test_case(13)]
#[test_case(42)]
fn one_arg(x: u32) {
    assert!(x == 13 || x == 42)
}

The test cases above will be parsed at compile time and two rust test functions will be generated instead:

This example is not tested
#[test]
fn one_arg_13() {
    x = 13;
    assert!(x == 13 || x == 42)
}
 
#[test]
fn one_arg_42() {
    x = 42;
    assert!(x == 13 || x == 42)
}

Example with multiple arguments:

This example is not tested
#[test_case(true, "true", 1)]
fn test_mix(x: bool, y: &str, z: u16) {
    assert!(x);
    assert_eq!(y, "true");
    assert_eq!(z, 1);
}

Example with test_name attribute:

This example is not tested
#[test_case(42, test_name="my_fancy_test")]
fn with_name(x: u32) {
    assert_eq!(x, 42)
}

Example with rust test attributes. All attributes after a test case will be appended after the generated #[test] attribute. For example the following test cases...

This example is not tested
#[test_case(18)]
#[ignore]
#[test_case(15)]
#[should_panic(expected = "I am panicing")]
fn attributes_test_case(x: u32) {
    panic!("I am panicing");
}

... will be compiled to these two tests. One gets ignored and the other suceeds:

This example is not tested
#[test]
#[ignore]
fn attributes_test_case_18 {
   let x = 18;
   panic!("I am panicing");
}

#[test]
#[should_panic(expected = "I am panicing")]
fn attributes_test_case_15() {
   let x = 15;
   panic!("I am panicing");
}