[][src]Crate pretty_assertions

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:

This example is not tested
use pretty_assertions::{assert_eq, assert_ne};

Show the example behind the screenshots above.

This example is not tested
// 1. add the `pretty_assertions` dependency to `Cargo.toml`.
// 2. insert this line at the top of each module, as needed
use pretty_assertions::{assert_eq, assert_ne};

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!

Also add #[cfg(test)] to your use statements, like this:

This example is not tested
#[cfg(test)]
use pretty_assertions::{assert_eq, assert_ne};

Note

  • Since Rust 2018 edition, you need to declare use pretty_assertions::{assert_eq, assert_ne}; per module. Before you would write #[macro_use] extern crate pretty_assertions;.
  • 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.