共关序测试和生产代码是某些编程语言中的默认值,并且已成为事实上的标准。我必须承认,虽然我喜欢Go和Typescript,但我总是对PHP的做法感到有些不适。我真的不能命名。这更多的是“感觉不正确”的感觉。当然,事实证明这只是一个胡说八道的偏见,因为它在PHP中的工作原理和其他语言一样。无论哪种语言,好处都是相同的:
- 乍一看,如果有一件代码的测试
- 您不必再导航了
- 您不必在源和测试目录中维护并行结构
让我们尝试一下,好吗?
迁移一个简单的项目
在平行结构和单个测试套件中使用测试和生产代码进行此设置:
src/
└── MyProject
├── MyClass.php
└── MyOtherClass.php
tests/
└── MyProject
├── MyClassTest.php
└── MyOtherClassTest.php
<testsuites>
<testsuite name="default">
<directory>tests</directory>
</testsuite>
</testsuites>
好消息是,迁移就像将MyProject
目录从tests
拖动到src
一样容易。至少如果您正在使用phpstorm。 PHPSTORM将适当地更改名称空间。如果您选择的编辑不提供这种重构,则搜索和替换也会做。
src/
└── MyProject
├── MyClass.php
├── MyClassTest.php
├── MyOtherClass.php
└── MyOtherClassTest.php
您需要做的最后一件事就是将phpunit指向新位置。只需将目录从tests
更改为src
,就可以了:
<testsuites>
<testsuite name="default">
<directory>src</directory>
</testsuite>
</testsuites>
那多个测试套件呢?
当有一个不仅仅是一个测试套件时,事情会变得有些棘手。让我们看一下此设置:
tests/
├── Integration
│ └── MyProject
│ └── MyClassTest.php
└── Unit
└── MyProject
└── MyOtherClassTest.php
<testsuites>
<testsuite name="integration">
<directory>tests/Integration</directory>
</testsuite>
<testsuite name="unit">
<directory>tests/Unit</directory>
</testsuite>
</testsuites>
如果我们在第一个示例中以相同的方式进行归因,则无法确定哪个测试属于哪个测试套件。这是解决此问题的两个选项。
使用后缀
第一个选择是将后缀Test
更改为IntegrationTest
或UnitTest
。尽管有点笨拙。
src
└── MyProject
├── MyClass.php
├── MyClassIntegrationTest.php
├── MyOtherClass.php
└── MyOtherClassUnitTest.php
<testsuites>
<testsuite name="integration">
<directory suffix="IntegrationTest.php">src</directory>
</testsuite>
<testsuite name="unit">
<directory suffix="UnitTest.php">src</directory>
</testsuite>
</testsuites>
使用组
第二个选项是使用group注释对测试进行分类。由于组和测试套件是不同的东西,并且不能由组组成,因此可以将配置简化为单个测试套件。只需记住,您必须在运行测试时使用group
选项而不是testsuite
选项(phpunit --group integration
或phpunit --group unit
)。
/**
* ...
* @group integration
*/
final class MyClassTest extends TestCase
{
// ...
}
/**
* ...
* @group unit
*/
final class MyOtherClassTest extends TestCase
{
// ...
}
<testsuites>
<testsuite name="default">
<directory>src</directory>
</testsuite>
</testsuites>
调整phpstorm
当我发现项目窗口中的文件看起来像这样时,我有些失望:
测试类具有指示测试的红色/绿色箭头,但我希望它们会突出显示,因为我习惯了开玩笑的测试。幸运的是,这很容易自定义。
转到首选项|外观与行为|示波器并设置新的范围匹配测试类(file:*Test.php
):
然后为新范围添加一个元素,然后在首选项下选择颜色|外观与行为|文件颜色:
现在应该看起来像这样:
甜!
您可能想调整的另一件事是某些检查的严重性。我注意到警告显示以前没有。这可能是由于PHPSTOMS根据其在哪种类型的目录( preverences |目录)中处理文件的方式。由于我们已经设置了新范围,因此我们只需要更改偏好下的严重性|编辑|检查静音不良检查。
而已
这就是我目前必须说的。我已经在我的个人项目中使用了这种方法已有一年多了,并在一个月前在工作中介绍了这种方法。到目前为止,每个人都喜欢它。