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.
}
}
注释,因此方法名称可以匹配。
答案 0 :(得分:1)
如果使用PHP> 5.3,命名空间可用于允许类名匹配:
有理由不这样做:
否则,您需要使用类别名导入受测试的类,以区别于测试用例:
use MyProject\MyClass as MyActualClass;
方法名称MyMethod与项目源中使用的方法名称匹配。
如果您认为testMyMethod
是替代方案,这听起来很有吸引力,但这不是 惯例。相反,您应该使用更具描述性的测试方法名称,例如testThatMyMethodReturnsTrueIfFooIsBar
。