Edsger W. Dijkstra 在 1972 年的文章《谦卑的程序员》中指出,程序测试很适合揭示缺陷,却无法充分证明缺陷不存在。这并不意味着我们不该尽可能多地测试!
程序的正确性,指代码实现预期行为的程度。Rust 的设计高度重视正确性,但正确性复杂且难以证明。Rust 的类型系统承担了大量工作,却不能发现所有问题,因此 Rust 还支持编写自动化软件测试。
假设我们编写一个 add_two 函数,为传入的数字加 2。它的签名接受一个整数并返回整数。实现并编译函数时,Rust 会进行前面学过的类型检查与借用检查,确保例如没有把 String 值或无效引用传入函数。
但 Rust 无法检查函数是否确实实现我们的意图:返回参数加 2,而不是加 10 或减 50!这正是测试的作用。
例如,我们可以编写测试,断言把 3 传入 add_two 时,返回值为 5。每次修改代码后都可以运行这些测试,确保已有的正确行为没有改变。
测试是一项复杂技能,一章无法涵盖如何编写优秀测试的所有细节。本章将介绍 Rust 测试设施的机制,包括测试中可用的注解和宏、运行测试的默认行为与选项,以及如何将测试组织为单元测试和集成测试。
—
原文:Writing Automated Tests,The Rust Programming Language,Rust 项目贡献者。本文为该章引言页面的中文翻译;Dijkstra 的观点作意译。原书采用 MIT / Apache-2.0 双许可,本译稿采用 MIT 许可。
Copyright (c) 2010 The Rust Project Developers
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.











暂无评论内容