《测试驱动数据库开发》——2.1 TDD中类的角色

简介:

本节书摘来自异步社区出版社《测试驱动数据库开发》一书中的第2章,第2.1节,作者:测试驱动数据库开发,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.1 TDD中类的角色

测试驱动数据库开发
在测试驱动开发中,一个类的主要作用是提供一种机制,以便许多具有相同行为的对象能够被创建。这一点非常重要,因为测试软件的方式就是通过检查一个单独对象的行为,并据此来预知从该对象的类生成的所有其他实例的行为。

当没有类时,测试仅仅告诉开发者有关某个特定对象的情况。当有了类时,测试会告诉开发者有关对象将如何被创建的情况,并进一步告诉开发者所有其他对象将如何被创建的情况。

2.1.1 可靠的实例化过程

当人们说“我写了一个对象来做X事情”时,事实上并没有写一个对象,而是写了一个类的对象来做X事情,正确的说法应该是“我写了一个类来做X事情”。

人们说他们写对象是因为类和对象之间的界限对他们现在来说是非常模糊的。有一个类通常意味着能得到一个对象,能够得到一个对象通常意味着有一个类。

如果用C#来写一个类的对象,实例化甚至不是要考虑的。这缘于开发了这个类,就意味着它将完全可靠地提供所需要的任意数量的对象,这些对象都能被创建,都能工作,并且都能以该类的其他实例完全相同的方式来工作。

2.1.2 测试检查对象

类能够安全和一致地产生对象这件事是如此的基础,以至于开发人员完全把其当成理所当然的事情。当教一个应用开发人员做测试驱动开发时,我可能会让他为构造方法写一些测试,但是只让他测试需要增加到这个构造方法上的行为,而不需测试刚刚创建好的对象是否被正确地创建了。

从小的方面来讲,那是因为我不认为构造方法比测试一个方法调用更有测试的必要。然而,这不是我不教人测试构造方法进行对象构造的主要原因。

我不教人测试构造方法进行对象构造的真正原因,是因为对我来说从来就没发生过构造方法可能没有构造好一个对象这种情况。当然,这种情况发生的机会还是存在的,但是微乎其微,本书不再考虑这个问题。

以上是对概念进行的一些解释,读者需要换一种方式来考虑这个问题。当在面向对象的系统上进行测试驱动开发时,我实际上是用类之间的关系来进行思考。测试类测试生产类,生产类使用服务类,等等。

然而,实际情况并不是这样的。当为一个生产类写一个测试类时,该测试类真的没有测试该生产类。取而代之的是,该测试类产生了一个内含一堆测试的测试对象。这些在测试对象里的测试接着就获得生产类的实例,并请求这些实例来做事情,然后对结果进行分析和报告。

通常情况下,尽管每次运行都使用全新的测试和生产对象,但都可以数百次地运行同样的测试,并看到完全相同的结果。正是这种可重复性让我确信,在生产部署环境中,生产对象将会正常工作。事实上,上述可预见性允许用类之间的关系来思考,而不是用它们创建的对象之间的关系来思考。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
3天前
|
Web App开发 测试技术 Python
【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
8 0
|
3天前
|
测试技术 持续交付
自动化测试在软件开发中的关键角色
【5月更文挑战第11天】自动化测试在软件开发中扮演关键角色,提高测试效率、确保质量、降低成本。它通过脚本或工具实现测试自动化,支持持续集成和复杂场景测试。选择合适工具、编写高质量用例及持续优化流程是实施关键。在快速发展的软件行业中,自动化测试已成为不可或缺的组成部分。
|
3天前
|
算法 测试技术 开发者
测试驱动开发(TDD)实战:从理论到实践
【5月更文挑战第8天】TDD实战指南:先测试后开发,确保代码质量与可维护性。核心思想是编写测试用例→实现代码→验证→重构。优点包括提高代码质量、促进设计思考和增强可测试性。实战步骤包括编写独立、明确的测试用例,遵循最小可用原则编写代码,运行测试并分析失败原因,以及在验证通过后进行代码重构与优化。通过TDD,开发者能提升编程技能和项目成功率。
|
3天前
|
机器学习/深度学习 数据采集 敏捷开发
探索软件测试中的AI驱动自动化:未来趋势
【5月更文挑战第6天】 随着人工智能(AI)技术的不断进步,其在软件测试领域的应用正变得日益重要。本文将探讨AI如何革新现有的软件测试流程,并预测其对未来测试实践的影响。我们将深入分析AI在测试用例生成、缺陷预测以及测试执行等方面的应用,并讨论实现这些技术的挑战和潜在好处。文章的目标是为读者提供一个清晰的视图,展示AI如何增强测试效率和有效性,同时指出实施过程中需要注意的关键因素。
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试中AI驱动的决策框架设计与实现
【5月更文挑战第5天】 在软件测试领域,自动化测试已成为提升测试效率和质量的关键手段。然而,随着软件系统的复杂性增加,传统的自动化测试方法面临挑战,尤其在测试用例的生成、执行及结果分析等方面。本文提出一种基于人工智能(AI)的自动化测试决策框架,旨在通过智能化的算法优化测试过程,并提高异常检测的准确率。该框架结合机器学习和深度学习技术,能够自学习历史测试数据,预测高风险变更区域,自动生成针对性强的测试用例,并在测试执行过程中实时调整测试策略。此外,通过自然语言处理(NLP)技术,该框架还能对测试结果进行语义分析,进一步提供更深入的洞察。本研究不仅增强了自动化测试工具的智能性,也为软件质量保证提
|
3天前
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成
【5月更文挑战第4天】随着人工智能(AI)技术的飞速发展,其在软件测试领域的应用也日益广泛。特别是在自动化测试过程中,AI技术能够显著提高测试用例的生成效率和质量。本文将探讨AI在自动化测试用例生成中的应用原理、优势以及面临的挑战,并展示通过AI技术优化测试流程的实际案例。
58 8
|
3天前
|
测试技术 持续交付 Swift
【Swift开发专栏】Swift中的测试驱动开发(TDD)
【4月更文挑战第30天】Test-Driven Development (TDD) 是一种软件开发方法,强调先编写测试用例再写代码。通过测试驱动代码、简明设计、重构和持续集成的循环过程,TDD助力构建高质量Swift软件。在Swift中,使用XCTest框架进行TDD实践,包括编写测试用例、实现功能、运行测试和重构。TDD的优势在于提升代码质量、减少调试时间,且与持续集成相结合。然而,学习曲线和确保测试覆盖率是挑战。TDD不仅是技术实践,也是思维方式,随着Swift的发展,其应用将更广泛。
|
3天前
|
敏捷开发 监控 jenkins
探索自动化测试在持续集成中的关键角色
【4月更文挑战第29天】 随着敏捷开发和持续集成(CI)实践的不断演进,自动化测试已成为确保软件质量和加快交付速度的核心要素。本文深入探讨了自动化测试在持续集成流程中的作用,分析了其提升效率、降低风险及促进团队协作的多重价值,并提出了有效整合自动化测试与CI的策略。通过案例分析,我们进一步验证了自动化测试在现代软件开发生态中不可替代的地位,同时指出了实施过程中可能遇到的挑战以及相应的解决方案。
|
3天前
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成技术
【4月更文挑战第29天】随着人工智能技术的不断发展,其在软件测试领域的应用也越来越广泛。本文主要探讨了AI驱动的测试用例生成技术在自动化测试中的应用,以及其对提高测试效率和质量的影响。通过对现有技术的深入分析和实例演示,我们展示了AI如何通过学习和理解软件行为来自动生成有效的测试用例,从而减少人工编写测试用例的工作量,提高测试覆盖率,降低错误检测的成本。
|
3天前
|
测试技术 开发者
【专栏】测试驱动开发(TDD)和行为驱动开发(BDD)的核心概念与实践
【4月更文挑战第27天】本文探讨了测试驱动开发(TDD)和行为驱动开发(BDD)的核心概念与实践。TDD强调先写测试用例,通过测试推动设计,确保代码质量与可维护性。BDD侧重软件行为和业务价值,提倡使用通用语言描述行为,减少沟通障碍。选择TDD或BDD取决于项目复杂性、团队技能和业务需求。理解两者差异有助于团队做出合适的选择,发挥测试的最大价值。