PHPUnit - 开发后创建测试

时间:2014-08-13 04:34:40

标签: codeigniter unit-testing tdd phpunit

我已经观看并阅读了一些有关PHPUnit和测试驱动开发的教程,并且最近开始使用Laravel,它使用它的TestCase类扩展了PHPUnit Framework。所有这些对我来说都是有意义的,因为你在开发时创建测试。我发现Laravel的扩展特别直观(特别是在测试Controller路由方面)

但是,我最近的任务是为一个接近完成的大型应用程序创建单元测试。该应用程序是在Codeigniter中构建的,它不是使用任何测试构建的

我发现我不完全确定从哪里开始,或者采取什么步骤来确定我应该创建的测试。

我应该考虑测试每种控制器方法吗?或者我需要更多地分解它?不可否认,许多控制器方法都在执行多项任务。

2 个答案:

答案 0 :(得分:1)

为现有项目编写测试真的很困难。我建议你首先开始编写不依赖于其他类的类的测试。然后,您可以继续将测试编写到与您编写测试的类相结合的类中。您将通过重复此过程逐步增加测试覆盖率。

另外请不要忘记,有时您需要重构代码以使其可测试。您应该改进代码设计,例如,如果您的控制器方法执行多个任务,则应将此方法划分为子方法并独立测试每个方法。

我还建议您查看此question

答案 1 :(得分:0)

你有点紧张,但这就是我在你的情况下会做的事情。您需要重构(即更改)现有代码,以便最终得到三种类型的函数。

第一种是与外界打交道的。我指的是与I / O,您的框架或操作系统甚至是稳定模块的库或代码对话的任何内容。基本上所有依赖于代码的东西,你不能或不会改变。

第二组函数是转换或创建数据结构的位置。他们唯一应该知道的是他们作为参数接收的数据结构,他们回传的唯一方式是改变这些结构或创建和填充新结构。

第三组由协调函数组成,这些函数调用外部函数,获取它们返回的数据结构并将这些结构传递给转换函数。

您的测试策略如下:第二组可以通过创建伪数据结构,传入并检查转换是否正确完成来进行测试。可以通过依赖注入和模拟来测试第三组协调函数,以查看它们是否正在调用外部世界并正确转换函数。最后,不应测试最后一组函数。你遵循这句格言 - "使它变得如此简单以至于它们显然没什么不对而且#34;。看看你是否可以将它保存到一行代码中。如果你为这些代码查看了四行代码,那么你可能做错了。

如果您对TDD完全陌生,我强烈建议您首先习惯在绿色领域项目/模块上进行此操作。我在单元测试上做了一些错误的开始,因为我之后尝试将其搞砸到项目中。 TDD真的是一种快乐,当你最终理解它时,如果你因为过于陡峭的学习曲线而在早期就气馁,那就不好了。