Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codeigniter PHPUnit-开发后创建测试_Codeigniter_Unit Testing_Tdd_Phpunit - Fatal编程技术网

Codeigniter PHPUnit-开发后创建测试

Codeigniter PHPUnit-开发后创建测试,codeigniter,unit-testing,tdd,phpunit,Codeigniter,Unit Testing,Tdd,Phpunit,我已经观看并阅读了一些关于PHPUnit和测试驱动开发的教程,最近开始与Laravel合作,后者通过其TestCase类扩展PHPUnit框架。所有这些对我来说都是有意义的,因为在开发过程中创建测试。我发现Laravel的扩展特别直观(特别是在测试控制器路由方面) 然而,我最近的任务是为一个即将完成的大型应用程序创建单元测试。该应用程序是内置的Codeigniter,并没有进行任何测试 我发现我不完全确定从哪里开始,或者采取什么步骤来确定我应该创建的测试 我应该测试每个控制器方法吗?还是我需要把

我已经观看并阅读了一些关于PHPUnit和测试驱动开发的教程,最近开始与Laravel合作,后者通过其TestCase类扩展PHPUnit框架。所有这些对我来说都是有意义的,因为在开发过程中创建测试。我发现Laravel的扩展特别直观(特别是在测试控制器路由方面)

然而,我最近的任务是为一个即将完成的大型应用程序创建单元测试。该应用程序是内置的Codeigniter,并没有进行任何测试

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


我应该测试每个控制器方法吗?还是我需要把它分解得更详细一些?诚然,这些控制器方法中的许多都在执行不止一项任务。

为现有项目编写测试确实很困难。我建议您首先为不依赖于其他类的类编写测试。然后,您可以继续为类编写测试,这些类与您为其编写测试的类结合在一起。您将通过重复此过程逐步增加测试覆盖率

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


我还建议你看看这个

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

第一类是那些与外部世界打交道的人。这里我指的是与I/O、框架、操作系统、甚至是稳定模块中的库或代码对话的任何东西。基本上,所有依赖于代码的内容都是您无法更改或可能无法更改的

第二组函数用于转换或创建数据结构。他们唯一应该知道的是作为参数接收的数据结构,而他们进行通信的唯一方式是更改这些结构或创建并填充新结构

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

然后,您的测试策略如下:第二组可以通过创建假数据结构、传入并检查转换是否正确完成来进行测试。第三组协调函数可以通过依赖项注入和模拟进行测试,以确定它们调用外部世界并正确转换函数。最后,不应测试最后一组函数。你遵循这条格言——“让事情变得如此简单,他们的行为显然没有错”。看看是否可以将其保留为一行代码。如果您为这些代码检查了四行代码,那么您可能是做错了


如果您对TDD完全陌生,我强烈建议您首先习惯在绿地项目/模块上使用TDD。我在单元测试上做了几次错误的开始,因为我试图在之后将其固定到项目上。当你最终摸索TDD时,它确实是一种乐趣,因此如果你因为学习曲线太陡而过早感到沮丧,那将不是一件好事。

谢谢,我想这将是一件艰难的事情。我还研究了使用Codeception进行验收测试。我知道这是最低限度的,但它可能是最便宜的、不依赖框架的测试方式。我也会考虑你的建议!