Crate testx

Crate testx 

Source
Expand description

§An extended Rust testcase

The testx crate provides the testx macro, which is an extended version of the Rust test macro. The key features are:

  • The testx macro is fully compatible for the Rust test macro, all tests maked with #[testx] (instead of #[test]) are executed with cargo-test.
  • Support for a test preparation function.

To use it, put the following line into the [dev-dependencies] section of your Cargo.toml:

[dev-dependencies]
testx = "0.1.2"

§Create a testx testcase

Mark the testcase with #[testx]. Calling cargo test will execute the testcase.

use testx::testx;

#[testx]
fn sample() {
    assert_eq!(1, 1);
}

// output:
// running 1 test
// test sample ... ok

§Migrate from #[test] to #[testx]

Simply replace the line #[test] with #[testx] for those tests you want migrate.

§Prepare data for a testcase with a setup function

Provide a function setup which prepares and returns some data for your testcase. Next, your testcase needs one argument, which must match the return value of the setup function.

A testcase marked with #[testx] will first execute the setup function and will pass its return value to your testcase.

use testx::testx;

fn setup() -> u32 {
    4711
}

#[testx]
fn sample(num: u32) {
    assert_eq!(num, 4711);
}

If more than one argument is required, the setup function should collect them into a tuple. The testx macro will disassemble them into several arguments.

use testx::testx;

fn setup() -> (u32, String) {
    (4711, String::from("foo"))
}

#[testx]
fn sample(num: u32, str: String) {
    assert_eq!(num, 4711);
    assert_eq!(str, "foo");
}

Note: For a testcase without an argument, the setup function will not be executed!

By default a function called setup is called for each testcase. If you need another function, assign a setup attribute with the name of the setup function to the macro. The function name can be either a string or the path to the function. Assign the no_setup attribute if you want to explicity mark a testcase to have no setup function.

use testx::testx;

fn setup_666() -> u32 {
    666
}

#[testx(no_setup)]
fn sample_no_setup() {
    assert_eq!(1, 1);
}

#[testx(setup = "setup_666")]
fn sample_custom_str(num: u32) {
    assert_eq!(num, 666);
}

#[testx(setup = setup_666)]
fn sample_custom_path(num: u32) {
    assert_eq!(num, 666);
}

#[testx(setup = self::setup_666)]
fn sample_custom_path2(num: u32) {
    assert_eq!(num, 666);
}

Attribute Macros§

testx
Macro marks an extended Rust testcase.