微网站有什么好处,品牌网站制作网站公司,你学做网站学了多久,网站建设步骤流程详细介绍喜欢的话别忘了点赞、收藏加关注哦#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵#xff01;(#xff65;ω#xff65;)
11.3.1. 添加错误信息
在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏#xff0c;而这篇文章讲的就是它…喜欢的话别忘了点赞、收藏加关注哦对接下来的教程有兴趣的可以关注专栏。谢谢喵(ω)
11.3.1. 添加错误信息
在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏而这篇文章讲的就是它的进阶用法。
这三个宏是可以添加自定义错误信息的但这是可选项。如果你添加了自定义信息那么它们将会和标准的示范信息一同打印出来
对于assert!第一个参数是必填的自定义信息作为第二个参数对于assert_eq!和assert_ne!前两个参数是必填的自定义信息作为第三个参数
再把自定义信息传进去之后这个参数会被传递给format!宏用于拼接字符串由于format!宏可以使用{}占位符所以传进去的信息也可以使用占位符。
看个例子
pub fn greeting(name: str) - String {format!(Hello {name}!)
}#[cfg(test)]
mod tests {use super::*;#[test]fn greeting_contains_name() {let result greeting(Carol);assert!(result.contains(Carol));}
}greeting有字符串切片参数name传进去之后会返回Hello加name加!拼在一起的字符串。下面的greeting_contains_name测试函数先给把调用greeting(Carol)所获的值赋给result然后再在result上调用contains这个方法来查找result里是否有Carol
这个代码现在测试是没有问题的。
那来手动引入一个bug修改greeting函数
pub fn greeting(name: str) - String {format!(Hello!)
}#[cfg(test)]
mod tests {use super::*;#[test]fn greeting_contains_name() {let result greeting(Carol);assert!(result.contains(Carol));}
}这样测试会失败
$ cargo testCompiling greeter v0.1.0 (file:///projects/greeter)Finished test profile [unoptimized debuginfo] target(s) in 0.91sRunning unittests src/lib.rs (target/debug/deps/greeter-170b942eb5bf5e3a)running 1 test
test tests::greeting_contains_name ... FAILEDfailures:---- tests::greeting_contains_name stdout ----
thread tests::greeting_contains_name panicked at src/lib.rs:12:9:
assertion failed: result.contains(Carol)
note: run with RUST_BACKTRACE1 environment variable to display a backtracefailures:tests::greeting_contains_nametest result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00serror: test failed, to rerun pass --lib但是失败信息只说在12行第9个字符恐慌了它没能提供更友好更有价值的一些信息那怎么办呢添加自定义信息呗
pub fn greeting(name: str) - String {format!(Hello!)
}#[cfg(test)]
mod tests {use super::*;#[test]fn greeting_contains_name() {let result greeting(Carol);assert!(result.contains(Carol),Greeting did not contain name, value was {result});}
}输出
$ cargo testCompiling greeter v0.1.0 (file:///projects/greeter)Finished test profile [unoptimized debuginfo] target(s) in 0.93sRunning unittests src/lib.rs (target/debug/deps/greeter-170b942eb5bf5e3a)running 1 test
test tests::greeting_contains_name ... FAILEDfailures:---- tests::greeting_contains_name stdout ----
thread tests::greeting_contains_name panicked at src/lib.rs:12:9:
Greeting did not contain name, value was Hello!
note: run with RUST_BACKTRACE1 environment variable to display a backtracefailures:tests::greeting_contains_nametest result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00serror: test failed, to rerun pass --lib可以看到自定义信息出现在报错信息里了。这样的错误信息更具有实际意义也就可以更容易地找到错误出现的原因。