PHPUnit测试套件命名约定

时间:2016-02-12 22:58:13

标签: php unit-testing phpunit

PHPUnit manual突出了一些惯例:

  • 课程ValueError: invalid literal for int() with base 10: 'www.google.com'的测试会进入课程MyClass
  • 班级MyClassTest位于档案MyClassTest
  • MyClassTest.php继承自MyClassTest
  • 测试是名为PHPUnit_Framework_TestCase
  • 的公共方法

这将产生类似于此文件夹结构的内容:

test*

......和这个测试用例:

├── src/
│   ├── classes/
│   │   ├── MyClass.php # Different
│   └── ...
├── tests/
│   ├── testcases/
│   │   ├── MyClassTest.php # Different
│   ├── bootstrap.php
│   └── ...
└── ...

我的问题

我想知道测试套件中使用的命名是否有任何理由无法反映项目的源代码?例如,我认为文件名可以匹配:

MyClassTest extends PHPUnit_Framework_TestCase {

    testMyMethod() {
        // Code here.
    }
}

如果使用PHP> 5.3,命名空间可用于允许类名匹配:

├── src/
│   ├── classes/
│   │   ├── MyClass.php # Same
│   └── ...
├── tests/
│   ├── testcases/
│   │   ├── MyClass.php # Same
│   ├── bootstrap.php
│   └── ...
└── ...

请注意,使用了namespace MyProject\MyTests; MyClass extends PHPUnit_Framework_TestCase { # The class name MyClass matches the class name used in my project's source. /** * @test */ MyMethod() { # The method name MyMethod matches the method name used in my project's source. // Code here. } } 注释,因此方法名称可以匹配。

1 个答案:

答案 0 :(得分:1)

  

如果使用PHP> 5.3,命名空间可用于允许类名匹配:

有理由不这样做:

  • 在同一名称空间中测试和测试类是有意义的
  • 否则,您需要使用类别名导入受测试的类,以区别于测试用例:

    use MyProject\MyClass as MyActualClass;
    
  

方法名称MyMethod与项目源中使用的方法名称匹配。

如果您认为testMyMethod是替代方案,这听起来很有吸引力,但这不是 惯例。相反,您应该使用更具描述性的测试方法名称,例如testThatMyMethodReturnsTrueIfFooIsBar