我需要创建一个自动加载到我的应用程序。我不想依赖文件系统中的文件,那么如何模拟一个新的调用?或者你如何测试一个自动加载器类? 谢谢。的PHPUnit - 测试自动加载类
5
A
回答
1
专门为测试磁带自动加载机创建了一些类文件,并将其放置在一个单独的目录(同级测试),您可以与磁带自动加载注册。使用class_exists($class, false)
来测试是否加载类而不调用自动加载器。
注意:如果您将自动加载器设计为非静态,以便您可以为测试实例化单独的实例而不是测试活动的实例,它会有所帮助。
这里是我的自定义自动加载的autoload()
法为例测试:
function test_autoload_loadsExistingClass() {
$this->fixture->registerPrefix('TestClasses', self::$root . 'models');
if (class_exists('TestClasses_Autoloader_Foo', false)) {
self::error('Class TestClasses_Autoloader_Foo is already loaded');
}
$this->fixture->autoload('TestClasses_Autoloader_Foo');
if (!class_exists('TestClasses_Autoloader_Foo', false)) {
self::fail('Class TestClasses_Autoloader_Foo failed to load');
}
}
function test_autoload_silentlyIgnoresMissingClasses() {
$this->fixture->registerPrefix('Foo', self::$root . 'models');
$this->fixture->autoload('Foo_Bar');
}
function test_autoload_searchesIncludePathForUnknownPrefix() {
if (class_exists('TestClasses_Autoloader_Foo', false)) {
self::error('Class TestClasses_Autoloader_Foo is already loaded');
}
set_include_path(self::$root . 'include' . PATH_SEPARATOR . self::$savedIncludePath);
$this->fixture->autoload('TestClasses_Autoloader_Foo');
if (!class_exists('TestClasses_Autoloader_Foo', false)) {
self::fail('Class TestClasses_Autoloader_Foo failed to load');
}
}
更新:哇,我不知道我怎样将我错过了”不希望依赖于文件系统中的文件“,但这很关键。您需要将自己的自动加载器的方法(例如includeFile($path)
)拨打include
。这将允许您在测试过程中模拟该方法,因此您不需要将文件包含在磁盘中。除此之外,您还可以像往常一样测试类:将其输入(如上所述)以自动加载类,并在应用时验证您的类是否使用正确的路径调用includeFile()
。
function testAutoloadLoadsExistingClass() {
$fixture = $this->getMock('MyAutoloader',
array('includeFile'), // mock the call to `include`
array(...)); // constructor args
$fixture->expects($this->once())
->method('includeFile')
->with('My/Package/Class')
->will($this->returnValue(true));
self::assertTrue($fixture->autoload('My_Package_Class'));
}
4
或者你如何测试一个自动加载类
恕我直言,你并不需要在单位所有测试磁带自动加载机。
如果您引导您的应用程序会崩溃醚真的很难,因为它可以找到所有需要的类或磁带自动加载机工作正常。
在测试套件每一个测试将测试磁带自动加载机是能够加载“下的测试类”的,所以我不会担心得多单元测试它。
也许称之为“集成测试等副作用,”如果你想,但我想说这就是不够好。
如果你不认为多数民众赞成不够好我把需要/ include语句在一个受保护的功能和覆盖测试自动加载该函数并检查它是否接收到正确的价值观。
0
你如何测试一个自动加载类?
依赖于自动装卸类做什么。例如,您可以测试注册自动加载回调是否与spl_autoload_register
一起使用。
或者,如果你的自动加载机提供了一个加载类和库的接口,以检查是否所有的类都被加载LoadLibrary
功能。但这通常依赖于文件系统(我认为这很好)。
相关问题
- 1. phpunit自动加载冲突,phpunit自动加载get的覆盖
- 2. 自动加载Laravel测试
- 3. 为什么不在phpunit测试中加载名称空间自动载入类?
- 4. Laravel 4.2:测试用例自动加载
- 5. PHPUnit:禁用autoloader进行自动加载测试问题
- 6. PHPUnit - 组织测试文件夹和自动加载
- 7. PHPUnit的不加载一些测试
- 8. Rails 3 + Rspec 2 +自动测试:自动测试不加载
- 9. Phpunit图像下载测试
- 10. 在PHPUnit测试期间自动加载自定义资源类型时未找到类
- 11. 自加载测试
- 12. PHPUnit的使用错误自动加载
- 13. JUnit,动态加载的测试类
- 14. getEntityManager PHPUnit中类测试
- 15. 用PHPUnit测试多个类
- 16. PHPUnit的4 - TestCase的子类的自动加载
- 17. 如何在使用PHPUnit测试“自动加载”时忽略异常?
- 18. 作曲家自动加载和PHPUnit
- 19. 作曲者自动加载失败PHPUnit
- 20. Zend自动加载模型在PHPUnit
- 21. iPhone:等待webview加载自动测试
- 22. 如何自动测试Outlook加载项?
- 23. PHPUnit - 自动重试失败的测试X次?
- 24. 用phpunit测试
- 25. CakePHP PHPUnit测试
- 26. Visual Studio 2010 Ult自动负载测试自动添加测试数据
- 27. PHPUnit的 - 测试类未找到
- 28. PHPUnit和auto测试类的要求
- 29. 负载装置phpunit测试为虚拟
- 30. Zend Framework 2 phpunit测试加入的表
1为“集成测试作为副作用”。我喜欢。 – GordonM