的PHPUnit manual亮点的一些约定:PHPUnit的测试套件命名约定
- 一类
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.
}
}
我的问题
我想知道是否有是什么原因为什么在测试套件中使用的命名不能反映项目的源代码?例如,我想文件名可以匹配:
├── src/
│ ├── classes/
│ │ ├── MyClass.php # Same
│ └── ...
├── tests/
│ ├── testcases/
│ │ ├── MyClass.php # Same
│ ├── bootstrap.php
│ └── ...
└── ...
如果使用PHP> 5.3,命名空间可用于允许类名匹配:
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.
}
}
注意@tests
注解用于所以方法名称可以匹配。
原因是**约定**。与例如camelcase的类名。没有什么能阻止你根据你的意愿命名你的测试类。对于其他开发者来说,这可能看起来很奇怪,并且会带来相反的问题 - 为什么不遵循约定。 –
感谢您的信息。我在想同样的事情,但是让我的测试完全反映我的信息来源对我来说很有意义。我的意思是,为什么命名测试方法和测试方法的方式不同,如果可以将它们命名为相同的? – henrywright
这是一个略有不同的修辞问题。 * convention *之一是公开预期结果,例如'testMyMethodDoesTheStuff()' –