【问题标题】:How to unit-test an enterprise symfony project?如何对企业 symfony 项目进行单元测试?
【发布时间】:2009-11-16 23:49:16
【问题描述】:
我正在从事一项大型项目。我们有大约 200 个数据库表,因此有大量的模型、操作等。
我应该如何开始为此编写测试?
我最大的问题是,使用 symfony 可以用石灰框架进行测试,这很棒。但大部分代码都对数据库进行写入、删除或其他操作。那么如何在不与数据库交互的情况下测试模型呢?
我想做单元测试,因为我在代码中遇到了错误,通过函数重构,但我什至不知道如何开始。文档中的示例仅涵盖了一个非常小的函数。当动作文件超过 700 行代码时,它看起来如何?
【问题讨论】:
标签:
php
unit-testing
symfony1
【解决方案1】:
好问题..我个人到处都遇到过这个问题。
这是我目前发现的:
1) 获取开发数据库。不要在产品数据库上进行测试!
2) 听起来可能很老套,但从小而简单开始。
3) 我不知道你的领域是什么(电子商务数据库、联系人数据库等),但我说它是一个电子商务数据库。首先测试创建一些订单模型并保存它们。也许在测试工具中重新创建一个真实的订单,以便将其保存到数据库中。现在,您可以快速创建 1000 个订单来运行测试……比手动进行网络结账要快得多。为了获得最大的利益,请为您当前正在处理的某些事情创建一个模型,以便您可以在测试期间使用它。
4) 现在开始测试您的模型提供的各种方法。同样,坚持那些与您当前尝试修复/使用的内容相关的内容。不要担心测试所有内容,只需测试一些东西,并确保您可以重复测试。
5) 需要测试控制器?酷,现在你有了一个模型可以使用,你不关心搞砸了,因为它不是真实的......需要一些变化吗?创建更多测试套件来构建不同的模型以满足您的每个需求。模型可能很复杂,但您应该能够编写一些测试函数来创建各种模型的变体。然后针对这些运行您的控制器...
6) 继续消除代码覆盖率。
警告:小心不要成为唯一运行单元测试的人。你将很快成为最有效的问题解决者,但人们会试图让你解决所有问题......
【解决方案2】:
单个控制器动作中有 700 行?测试有一种方法可以在您自己的代码中以其他方式暴露问题,而不是明显的断言。如果某些东西由于某种原因难以测试,则代码有问题。
开始测试项目时,无论大小,重点都应该是代码覆盖率。一开始不要太担心边缘情况(除非情况需要)。当开始测试一个项目时,我喜欢从模型开始,因为它们是最直接的。从那里继续进行控制器测试,看看它是如何进行的。