假设我正在开始一个新项目,质量是重中之重。

我计划进行广泛的单元测试,当我致力于架构以简化和支持进一步的单元测试时,需要记住什么很重要?

编辑 :我前段时间读过一篇文章(现在找不到),讨论将实例化代码与类行为解耦在单元测试时如何有帮助。这就是我在这里寻求的设计技巧。

有帮助吗?

解决方案

测试简单谈到通过可以代替许多的依赖关系的方法具有与测试代码(嘲笑,假货等)目前推荐的方式来完成,这是通过依赖倒置,又名好莱坞原理:“唐“T给我们打电话,我们会打电话给你。”换句话说,你的代码应该“求人办事,不看的东西。”

一旦你开始这样想的,你会发现代码可以很容易地对很多事情的依赖。你不仅对其他对象的依赖关系,但是数据库,文件,环境变量,操作系统的API,全局,单身等通过坚持一个良好的架构,您通过适当的层为他们提供最最小化这些依赖关系。所以,当谈到时间来测试,你并不需要一个工作数据库全部试验数据,你可以简单地用一个模拟数据对象替换数据对象。

这也意味着你必须认真梳理你的对象构造从你的目标执行。 “新”的语句放在构造函数生成的依赖,这是非常苦的测试模拟来代替。这是更好地传递这些依赖于通过构造函数参数。

另外,请迪米特法则的初衷。不挖不止一层深成一个对象,否则你创建隐藏的依赖关系。调用Flintstones.Wilma.addChild(卵石);是什么意思,你以为是在“摩登原始人”一个依赖确实是两个“摩登原始人”和“威尔玛”一个依赖。

其他提示

请确保您的代码是使其具有很高的粘性,低分离测试。并确保你知道如何使用工具嘲讽期间单元测试模拟出的依赖关系。

我建议你熟悉的 SOLID原则,让你可以写一个更容易测试代码。

您可能还想查看以下两个问题:

一些随意的想法:

  • 定义您的接口: 将功能模块相互解耦,并决定它们如何相互通信。接口是不同模块开发者之间的“契约”。然后,如果您的测试在接口上运行,您就可以确保团队可以将彼此的模块视为黑匣子,从而独立工作。

  • 首先至少构建并测试 UI 的基本功能。 一旦您的项目可以与您“交谈”,它就可以告诉您什么有效,什么无效......但前提是它没有对你撒谎。(奖金:如果您的开发人员别无选择只能使用 UI,您将很快发现易用性、工作流程、 ETC.)

  • 在最低实际水平上进行测试: 你对这些小片段的作用越有信心,就越容易将它们组合成一个有效的整体。

  • 在开始编码之前,根据规范为每个功能至少编写一个测试。 毕竟,这些功能是您的客户购买您产品的原因。确保它的设计能够完成它应该做的事情!

  • 当它做了它应该做的事情时不要满足;确保它 做它该做的事 不是 应该做的! 向其提供错误的数据、以不合逻辑的方式使用它、在数据传输期间断开网络电缆、与冲突的应用程序一起运行。您的客户会的。

祝你好运!

您的测试将永远只能是不如你的要求。他们可以是你想出了前一次全部,他们可以要求你拿出一个在时间,因为你增加新的功能,也可以要求你拿出你船后,人们开始要求报告错误的船负荷,但你不能写一个很好的测试,如果没有人能够或将记录到底是什么事是应该做的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top