Crate pretty_assertions [] [src]

Pretty Assertions

When writing tests in Rust, you'll probably use assert_eq!(a, b) a lot.

If such a test fails, it will present all the details of a and b. But you have to spot the differences yourself, which is not always straightforward, like here:

standard assertion

Wouldn't that task be much easier with a colorful diff?

pretty assertion

Yep — and you only need one line of code to make it happen:

Be careful when using this code, it's not being tested!
#[macro_use] extern crate pretty_assertions;

Show the example behind the screenshots above.

Be careful when using this code, it's not being tested!
// 1. add the `pretty_assertions` dependency to `Cargo.toml`.
// 2. insert this line at the top of your crate root or integration test
#[macro_use] extern crate pretty_assertions;

fn main() {
    #[derive(Debug, PartialEq)]
    struct Foo {
        lorem: &'static str,
        ipsum: u32,
        dolor: Result<String, String>,
    }

    let x = Some(Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok("hey".to_string())});
    let y = Some(Foo { lorem: "Hello Wrold!", ipsum: 42, dolor: Ok("hey ho!".to_string())});

    assert_eq!(x, y);
}

Tip

Specify it as [dev-dependencies] and it will only be used for compiling tests, examples, and benchmarks. This way the compile time of cargo build won't be affected!

In your crate root, also add #[cfg(test)] to the crate import, like this:

Be careful when using this code, it's not being tested!
#[cfg(test)] // <-- not needed in examples + integration tests
#[macro_use]
extern crate pretty_assertions;

Note

  • Each example and integration test also needs #[macro_use] extern crate pretty_assertions, if you want colorful diffs there.
  • The replacement is only effective in your own crate, not in other libraries you include.
  • assert_ne is also switched to multi-line presentation, but does not show a diff.

Macros

assert_eq
assert_ne

Structs

Style

A style is a collection of properties that can format a string using ANSI escape codes.