php - CakePHP 中的单元测试?

标签 php unit-testing cakephp

我想知道,你们如何在 CakePHP 中进行单元测试? 你如何在项目中加入测试? 您测试项目的哪些部分?您如何决定要对哪些部分进行单元测试? 你们还能在截止日期前完成工作吗?

最佳答案

I'm wondering, how do you guys unit-test in CakePHP? How do you incorporate tests in projects?

我通常使用 Cake Core 使用的最简单的设置。我为每个 Controller 和模型设置了一个测试文件。如果代码具有复杂的选项或助手的输出变化很大,我通常会测试助手/组件/行为的输出。我发现我的覆盖率约为 65-75%,即使我的测试的代码覆盖率如此之低(有限的文件子集的 65% 非常薄弱),我通过测试发现或修复的错误比我发现的要多,并且没有正确修复。

What parts of a project do you test? How do you decide which parts gets to be unit-tested?

我总是测试所有模型功能。自定义查找、分页结果集等。我对它们进行了以下测试。正确的结果数量(来自夹具数据的查找)、正确的结果集(来自夹具数据的查找)、返回字段的正确性、返回的结果数量以及每个自定义查找类型的正确数据集。如果我在任何发现(自定义或其他)上使用分页集,请正确分页。

我总是测试不会导致 View 被渲染的 Controller 功能。作为一种习惯,我倾向于移动不专用于设置 View 变量或选择 View 以呈现给 Controller 中的私有(private)/ protected 函数或模型函数调用的 all 逻辑。 这让我可以直接测试剩余的 Controller 操作(带有 View 输出的操作)。如果我渲染一个 View ,那么这些函数可能表现良好,what 渲染的任何问题都在调用堆栈的上方。

我使用特定选项集测试助手的输出。我并不总是涵盖选项数组的所有排列,但是当两个不同的键导致互斥行为或者我可以检查结果是否包含在我的标记中的可预测属性时 - 我会测试这些场景。

如果一个组件从某个地方获取数据并对其进行操作,我也会检查格式或返回组件函数上的数据。行为也一样。

如果我在某处使用了静态类,我将测试该类中的函数以获得正确的返回结果以及生成一些强制失败或故意错误条件。特别是如果错误导致重定向,或者数据以某种形式通过管道发送。如果失败是静默的或返回默认值,我还会检查以确保确实发生了这种情况。

Do you guys still get to finish the job before the deadline?

这里的第一次通过截止日期总是稍微“软”,以解决测试和任何突然出现的问题。我发现,如果您使用普通的旧铅笔和一些方格纸或白板,您甚至可以在编写任何代码之前轻松找出一组基本测试。使用这种方法,您可能会发现一个项目需要多花 25% 的前期时间,但在应用程序的整个生命周期中,您将轻松节省您前期花费的 25%,因为后续不会出现那么多问题管道。


我对此进行了编辑以添加一些链接,以查看实际测试技术并作为一种直观地了解它们如何结合在一起的方式。

  1. http://bakery.cakephp.org/articles/view/testing-models-with-cakephp-1-2-test-suite
  2. http://book.cakephp.org/view/160/Testing
  3. http://debuggable.com/posts/unit-testing-in-cakephp-part-1---introduction-to-unit-testing:48102610-c5d0-4398-a010-76974834cda3
  4. http://mark-story.com/nodes/view/testing-cakephp-controllers-the-hard-way

另外,我必须同意和不同意蛋糕开发人员在编写测试方面的看法。 测试您想要重用的任何内容(无论是单个组件文件还是复杂插件)都是一个非常好的主意,因为您将分发它,并且测试都显示了工作代码,并且是很好的示例一段代码可以做什么。

至于不测试 Controller ,因为你必须使用模拟对象——这只是一个不做一些棘手工作的弱借口,确实确实降低了错误率,并让您巨大增加了您对自己代码的理解。

关于php - CakePHP 中的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1815634/

相关文章:

html - 在 CakePHP 中将命名路由转换为散列 (#)

php - preg_match 返回奇怪的结果

c++ - GoogleTest 和内存泄漏

unit-testing - 控制流测试和基本路径测试之间的区别

c# - Moq 具有匿名类型的函数

CakePHP 自定义全局函数

php - 使用 CakePHP3 将文件/图像上传到数据库

java - php中byteValue java的替代函数

php - PHP 中的 json_encode 没有返回任何结果

PHP mkdir 权限由于只读属性而被拒绝在 Windows Server 2008 IIS 7 上运行?