我目前正在开发一个现有的PHP项目。当前的代码设计并不是那么好,并且错误开始堆积起来。所以我想要的是添加一个全面的测试套件,使其更可靠。
已经有一些用PHP单元编写的单元测试,但测试覆盖率不是那么好。该项目并未真正遵循TDD或任何类型的测试密集型流程。我想尽可能地测试所有东西。但问题是我不确定是否可以添加现有代码的测试。正如我所提到的,代码结构并不那么好,因此添加测试可能会变得非常麻烦和困难。
有没有更好的方法在像这样的项目中添加单元测试?或者我应该重写项目?也许逐个模块?
答案 0 :(得分:6)
尝试将单元测试添加到现有应用程序时出现的大多数问题都会出现,因为通常情况下,应用程序尚未将其功能划分为可以有效测试的类和方法。
这实际上不仅是TDD的主要优势之一,而且是在开发应用程序时编写测试的好方法。这些测试迫使您编写简洁的方法,目的明确,副作用尽可能少。
完全重写将是最终的解决方案,但我怀疑你有时间和精力来做到这一点;此外,这样的行动可能不是我完全必要的!
老实说,根据我的经验,最好的方法是立即开始为每个模块编写测试,在需要的地方重构。从核心元素开始,例如用户注册和管理位,然后再进一步。
这看起来似乎是一项艰巨的任务,它可能会让你觉得你的工作是徒劳的,但从长远来看,这些测试会大大减少调试应用程序的时间!
进一步阅读:
答案 1 :(得分:3)
我们只是开始测试我们可以测试的内容。处理数据和返回结果的类可以现在编写测试,然后运行,并验证可以测试类的一小部分。这开始是令人生畏的,但我们现在有大约45%的代码覆盖率,有3000多个测试。当人们重构代码时,这些测试目前会捕获错误。
我们尝试隔离使测试更容易的模块和类,并且一些测试只是测试构造函数,公共接口等......如果它们发生变化,那么就会出现问题,因为某些东西可能会破坏。
当发现新错误时,我们首先尝试编写测试来说明错误,然后我们进行代码更改以解决测试问题。这使我们的测试继续前进。
每天,我们添加了一些测试,直到结果开始令人鼓舞,具有更大的测试基础和更完整的代码覆盖率。在此过程中的某些时刻,我们的测试实际上发现了在人们添加或更改破坏某些传统接口的代码时创建的问题。这是自动化测试的第一次好胜利,因为它是在没有人工测试旧输入文件的情况下发现的,可能没有经过测试。
答案 2 :(得分:0)
在尝试将测试添加到现有代码库时要非常小心。正如安德烈指出的那样,任务非常庞大,从一开始就集成了测试,TDD的效果最好。
尝试为您的核心功能添加测试,并通过开发人员测试其余功能来修复旧方式的错误。