使用PHPUnit进行单元和功能测试的文件系统/目录布局
我需要将集成测试添加到我的测试套件中。虽然名称是PHPUnit,但我发现这里有很多对运行非单元测试的支持。我的布局是这样的:
<root>
lib/
Foo/
Component.php
tests/
lib/
Foo/
ComponentTest.php
resources/
fixtures/
在我看来,有三种方法可以在这里添加高于单元级别的测试:
添加并行结构
<root>
tests/
unit/
lib/
Foo/
ComponentTest.php
integration/
lib/
Foo/
ComponentTest.php
resources/
fixtures/
这应该可以工作,除非现在没有1:1的class:test类关系,这可能会(而且很可能会)混淆NetBeans。
添加<root>/tests/lib/Foo/ComponentIntegrationTest.php
具有与上面相同的问题,但目录较少。
将测试添加到现有测试类,符号类似于@group integration
这保持了1:1的关系,但会显著增加测试套件的复杂性。此外,由于需要在更改的环境中调用SUT,因此我不能只重用单元测试中的_setup()。
想法?
解决方案
单元测试用于隔离测试单个单元(类)。集成测试旨在一起测试多个单元。因此,您可能不会在类和它们所属的集成测试之间具有1:1的相关性。
我将创建一个单独的目录结构--甚至可能是一个单独的项目--来存放集成测试。NetBeans将无法打开类所属的"测试",因为它将属于多个测试,但它将继续打开其匹配的单元测试。我们有一个单独的项目,使用Selenium进行集成测试(在我到达之前称为健全性测试),到目前为止它工作得足够好。
更新
我们集成测试的目录布局非常简单:每个站点一个目录。我们为站点提供了单一的代码库,并使用视图来允许单个站点覆盖布局(不仅仅是换皮)。我们在这些测试上花的时间没有我想要的那么多。在将站点推送到临时服务器之后,我们使用Selenium来运行测试。我还没有机会将它们连接到我们的持续集成服务器(Jenkins),但这将是理想的。
我建议您在站点上按功能区或模块组织它们。在很大程度上,这取决于您如何看待您正在测试的项目。示例可能如下所示:
src/
Model/
Cart.php
...
tests/
unit/
phpunit.xml
bootstrap.php
Model/
CartTest.php
...
integration/
account/
login/
register/
subscriptions/
products/
listing/
details/
search/
cart/
shop/
checkout/
相关文章