4 releases

Uses old Rust 2015

0.2.1 Apr 9, 2018
0.2.0 Mar 6, 2018
0.1.1 Mar 1, 2018
0.1.0 Mar 1, 2018

#739 in Testing

Download history 23/week @ 2024-01-08 18/week @ 2024-01-15 15/week @ 2024-01-22 22/week @ 2024-02-05 76/week @ 2024-02-12 151/week @ 2024-02-19 69/week @ 2024-02-26 104/week @ 2024-03-04 133/week @ 2024-03-11 117/week @ 2024-03-18 64/week @ 2024-03-25 55/week @ 2024-04-01 31/week @ 2024-04-08 27/week @ 2024-04-15

198 downloads per month
Used in 6 crates (4 directly)

MIT license

230KB
413 lines

Table Test

Build Status codecov.io Current Crates.io Version

This library aims to make table testing reliable in Rust. The main problem of table testing with basic Rust is assert_eq! calling panic!. It means that when an assertion fails, then the rest of the test function is not executed. In the case of a table test, it will result with potentially multiple use cases untested, making the output of that test unreliable.

Usage

Specify this crate as [dev-dependencies].

[dev-dependencies]
table-test = "0.2.1"
#[cfg(test)] // <-- not needed in integration tests
#[macro_use]
extern crate table_test;

The table iterator returns a tuple (test_case, input, expected). If you have more than one input, just use a tuple of inputs. The test_case allows you to add comments like given when and then, but also description and custom giving you the freedom to log your tests the best way possible.

Examples

If we make a simple test for an add function that takes two values as input:

#[test]
fn test_add() {
    let table = vec![
        ((1, 2), 3),
        ((2, 5), 7),
        ((0, 0), 0),
        ((0, 1), 1),
        ((2, 2), 4),
    ];

    for (validator, (input_1, input_2), expected) in table_test!(table) {
        let actual = add(input_1, input_2);

        validator
            .given(&format!("{}, {}", input_1, input_2))
            .when("add")
            .then(&format!("it should be {}", expected))
            .assert_eq(expected, actual);
    }
}

If we make a mistake in the implementation of the add function and multiplying instead, then the output will look like this:

multiple inputs

As we can see, it would be easier to debug than with a normal assert_eq! output. But the gain is when we work with something more complex. The example here test the changing name method and the result looks like this:

mutable struct

More examples can be found in the examples folder.

Dependencies

~245KB