有什么理由不让PHP单元测试与测试中的类一起进行吗


Is there any reason not to keep PHP unit tests with the class under test?

在PHPUnit和PHPSpec等框架中进行PHP单元测试的标准做法似乎是将测试用例放在一个单独的目录中,远离被测试的类,例如:

FoobarApp
├── Models
│   ├── SomeModel
├── Tests
│   ├── SomeModelTest

就我个人而言,我发现将每个测试放在它正在测试的类旁边的同一目录中更清晰、更有帮助,如下所示:

FoobarApp
├── Models
│   ├── SomeModel
│   └── SomeModelTest

我的问题是:有什么理由不使用这种替代安置吗?这只是开发者偏好的问题吗?

这只是开发者偏好的问题吗?

基本上是的。

它最初是一种偏好,在OOP语言中很常见,例如在Java中,它们通常是分开的。

其他人认为将这些测试分开有更多好处:

  • 不要打乱实现树
  • 为一个实现类拥有一个测试类是很常见的,但没有规则。如果这是有意义的,那么为实现类提供多个测试类可能是合适的。现在,如果它们也都在src/树中,请考虑这一点
  • 单独清洁以进行部署。生产中没有人需要测试用例;将它们放在一个单独的目录中会使它们很容易被排除在外
  • 在代码库中搜索时更容易分离。大多数时候,我对搜索测试不感兴趣

你可以接受大多数开发人员习惯的东西,也可以推出自己的东西,没有人会阻止或强迫你。但一旦你与其他人(teams@work,OSS)合作,你会发现大多数人都在把他们分开。

没有人会关心你的私人项目,但如果你开放源码软件并期望合作,你想通过应用通用约定来为任何人简化它。

例如:

我不是PSR-2:的粉丝

  • 在类/方法上分离{?不
  • 4个空格?我更喜欢2

然而,您不喜欢标准:协作有好处,作为一个团队思考。因此,我在所有的项目中都改用PSR-2,尽管我个人不喜欢它

与他人合作时,没有自我的容身之地。这并不是说你必须服从一切。作为大局的一部分,你自己决定自己打得有多好;-)