测试软件是软件开发中最重要的方面之一。它确保您编写的代码能够按预期执行。现在和将来。
为您的代码创建一套全面的测试,可以让您确信它能够按预期执行。它还有助于让其他人也相信这一点。使用或维护您代码的其他人。
在您创建代码一段时间后运行测试,例如在您依赖的一些组件更新后,将告诉您您的代码是否仍然有效,或者您是否需要进行更改。
有很多不同类型的测试。我在这里列出了其中一些,按它们在实际编程项目中使用的顺序排列
我不会深入解释瀑布模型和敏捷的含义。您可以在维基百科上查找。
基本上,如果您正在设计飞往火星的宇宙飞船、某些医疗设备或任何必须严格按照规范工作且错误率极低的设备,请使用瀑布模型方法。这意味着在构建软件之前分析、描述和记录软件的各个方面。
如果您正在设计下一个即时通讯平台、商业应用程序或任何事先未知确切规格但会随着时间推移而发生变化的应用程序,请使用敏捷开发方法。
以下主题特定于敏捷。
测试驱动开发:先写测试,再写代码。
当你开发新的代码或在现有代码中添加新功能时,首先定义一组最终工作代码应该通过的测试。接下来运行测试。大多数情况下,所有测试都会失败。现在开始实现和重构你的代码,直到所有测试通过。
这种工作方式的主要优势在于,你首先关注代码应该 **做什么**,而不是它应该如何工作。在实践中,效果是你编写更少的代码。
行为驱动开发:TDD 的扩展,包括客户的功能需求。
在实现任何新代码之前,你需要知道该代码的预期行为应该是什么。换句话说,支付你工资的客户想要什么。这涉及到客户和开发人员使用相同的语言。这种语言也被称为普通英语。BDD 使用固定布局来写下 *用户故事*。
以下来自 Cucumber 的示例
功能: 多站点支持
作为 Mephisto 网站所有者
我想要 为不同的人托管博客
为了 赚取巨额财富背景
给定 一个名为“Greg”的全局管理员
以及 一个名为“Greg 的反税 rant”的博客
以及 一个名为“Dr. Bill”的客户
以及 一个名为“昂贵的治疗”的博客,由“Dr. Bill”拥有场景: Dr. Bill 发布到自己的博客
给定 我以 Dr. Bill 的身份登录
当 我尝试发布到“昂贵的治疗”
那么 我应该看到“您的文章已发布”。
每个功能通常都有很多场景。
Ruby 拥有世界上最先进的测试工具集之一。
为了支持 TDD 风格的测试,rspec 和 minitest 都非常流行。BDD 风格的测试通常使用 cucumber 完成。Cucumber 允许你将用普通英语编写的功能需求转换为 Ruby 代码的可执行 (!) 测试。
测试不应该涉及额外的工作。这很快会导致更少的测试。答案是自动化测试。当测试自动化工具注意到你更改了(Ruby)文件时,部分或全部测试将再次执行。你将收到有关新失败或通过测试的通知。
例如,可以使用 **autotest** 或 **guard** 进行测试自动化。Guard 还可以自动执行许多其他任务。