[][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);


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
use pretty_assertions::{assert_eq, assert_ne};


  • 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.





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