Need help with rust-pretty-assertions?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

colin-kiegel
635 Stars 28 Forks Other 141 Commits 14 Opened issues

Description

Overwrite `assert_eq!` with a drop-in replacement, adding a colorful diff.

Services available

!
?

Need anything else?

Contributors list

# 159,437
Rust
Shell
CSS
proc-ma...
45 commits
# 62,703
python-...
jython
hexadec...
binary-...
36 commits
# 6,751
Less
React
ant-des...
imgui
5 commits
# 553,572
Rust
Python
randomi...
gamecub...
3 commits
# 259,726
Rust
Git
cargo-s...
reactjs
1 commit
# 355,651
Rust
kde
Homebre...
C
1 commit
# 34,896
Rust
C++
mocking...
webrtc
1 commit
# 559,060
Rust
Shell
pbr
vulkan
1 commit
# 44,848
Rust
Perl
node
consens...
1 commit

Build status Latest version All downloads Downloads of latest version

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:

use pretty_assertions::{assert_eq, assert_ne};
Show the example behind the screenshots above.
// 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:
#[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.
  • Under Windows, the terminal state is modified to properly handle VT100 escape sequences, which may break display for certain use cases.
  • The minimum supported rust version (MSRV) is 1.35.0

no_std
support

For

no_std
support, disable the
std
feature and enable the
alloc
feature:
# Cargo.toml
pretty_assertions = { version= "...", default-features = false, features = ["alloc"] }

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.