You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Rust中的assert_eq!显示多行字符串

让Rust单元测试的多行字符串对比输出分行显示的方法

方法一:使用pretty_assertions crate

这是最简便的方案,该 crate 会自动格式化多行字符串的对比输出,让差异一目了然。

  1. 添加依赖
    在Cargo.toml的dev-dependencies中加入:
[dev-dependencies]
pretty_assertions = "1.4.0" # 可替换为最新稳定版本
  1. 修改测试代码
    引入 crate 中的assert_eq并替换默认断言:
use pretty_assertions::assert_eq;

#[test]
fn test_multiline_strings_are_equal() {
    let expected = "\
one
two
three
four
";
    let actual = "\
one
two
four
";
    assert_eq!(actual, expected);
}

测试失败时的输出会自动分行展示:

---- printer::tests::test_multiline_strings_are_equal stdout ----
thread 'printer::tests::test_multiline_strings_are_equal' panicked at 'assertion failed: `(left == right)`
  left: `
one
two
four
`
 right: `
one
two
three
four
`', src\printer.rs:600:9

方法二:自定义多行断言函数

如果不想引入额外依赖,可以手动实现一个断言函数,直接打印分行的字符串内容:

fn assert_multiline_eq(actual: &str, expected: &str) {
    if actual != expected {
        panic!(
            "多行字符串不匹配:\n\n实际内容:\n{}\n\n预期内容:\n{}",
            actual, expected
        );
    }
}

#[test]
fn test_multiline_strings_are_equal() {
    let expected = "\
one
two
three
four
";
    let actual = "\
one
two
four
";
    assert_multiline_eq(actual, expected);
}

失败时的输出示例:

---- printer::tests::test_multiline_strings_are_equal stdout ----
thread 'printer::tests::test_multiline_strings_are_equal' panicked at '多行字符串不匹配:

实际内容:
one
two
four

预期内容:
one
two
three
four
', src\printer.rs:600:9

内容的提问来源于stack exchange,提问作者Huw Walters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:38:16