单元测试 – 单元测试采用
我们试图向我们当前的项目引入单元测试,但它似乎并不工作。额外的代码似乎已经成为一个维护头痛,当我们的内部框架更改,我们必须解决任何单元测试挂起它。
我们有一个抽象基类,用于单元测试我们的控制器,作为模板调用到子类的抽象方法实现,即框架调用初始化,所以我们的控制器类都有自己的初始化方法。 我曾经是一个单位测试的倡导者,但它似乎并不在我们当前的项目。 任何人都可以帮助识别问题,我们如何使单元测试工作对我们,而不是对我们?
提示:
避免编写程序代码 如果测试是针对严重依赖于全局状态的程序性代码编写的,那么测试可以是一个负担,否则它会陷入一个丑陋的方法。 >避免全局状态,如果可能的话。 找到什么变化,封装它,并将它与保持不变的分离。 代码中的阻塞点比其他代码更频繁地变化。在你的代码库中做这个,你的测试将变得更健康。 >良好的封装导致良好的松耦合设计。 测试环境越大,维护越困难。 做任何你可以收缩测试和执行它们的周围环境。 >使用组合方法重构来测试更小的代码块。 从测试中删除重复,但确保它们保持焦点。 您可能无法删除所有重复,但仍然尝试删除它导致疼痛的地方。确保你不要删除那么多的重复,有人不能进来,告诉测试的一瞥。 (见Paul Wheaton的“Evil Unit Tests”文章对同一概念的另一种解释。) >没有人会想要修复一个测试,如果他们不能弄清楚它在做什么。 在正确的级别测试您要验证的内容。 考虑记录和回放Selenium测试中涉及的复杂性,以及在测试单个方法时可能发生什么变化。 >彼此隔离依赖关系。 >“弹簧陷阱”,通过故意引入一个bug,并确保它被测试捕获。 >参见:Integration Tests Are A Scam 知道什么时候使用基于状态的基于交互的测试 真正的单元测试需要真正的隔离。单元测试不会碰到数据库或打开套接字。停止嘲笑这些互动。验证您与协作者正确地通信,而不是该方法调用的正确结果是“42”。 演示测试驾驶规范 对于一个给定的团队是否需要测试驱动所有代码,或者为每行代码编写“测试第一”,这是值得争论的。但是他们应该至少写一些测试吗?绝对。有些情况下,测试优先无疑是处理问题的最好方法。 >尝试这个练习:TDD as if you meant it (Another Description) 资源: > Test Driven by Lasse Koskela > XUnit模式 >“Evil Unit Tests”作者:Paul Wheaton (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |