编写自动化测试
在他 1972 年的文章《谦逊的程序员》中,Edsger W. Dijkstra 说: “程序测试可能是显示 bug 存在的一种非常有效的方法,但是 这无可救药地不足以表明他们的缺席。这并不意味着我们 不应该尝试尽可能多地测试!
我们程序的正确性是指我们的代码在多大程度上按照我们的意图执行 它来做。Rust 的设计高度关注正确性 的程序,但正确性很复杂,不容易证明。Rust 的类型 system 承担了很大一部分负担,但 type system 无法捕捉 万事。因此,Rust 支持编写自动化软件测试。
假设我们编写一个函数,将传递给的任何数字加 2
它。此函数的签名接受一个整数作为参数,并返回一个
整数。当我们实现和编译该函数时,Rust 会执行所有作
到目前为止,您已经学习的类型检查和借用检查,以确保
例如,我们没有传递值或无效引用
添加到此功能中。但是 Rust 无法检查这个函数是否能精确地执行
我们打算返回参数加 2,而不是返回
参数加 10 或参数减 50!这就是测试的用武之地。add_two
String
我们可以编写测试来断言,例如,当我们传递给函数时,返回的值为 .我们可以随时运行这些测试
我们对代码进行更改,以确保任何现有的正确行为都没有
改变。3
add_two
5
测试是一项复杂的技能:尽管我们不能在一章中涵盖所有细节 关于如何编写好的测试,在本章中,我们将讨论 Rust 的测试设施。我们将讨论 annotation 和宏 在编写测试时可用,默认行为和选项 用于运行测试,以及如何将测试组织到单元测试中,以及 集成测试。
本文档由官方文档翻译而来,如有差异请以官方英文文档(https://doc.rust-lang.org/)为准