0

我有以下文件夹结构:

/main
    /loader.php
    /build.xml
    /components
        /package1
            /class1.php
        /package2
            /class2.php
    /tests
        /package1
            /class1.test.php
        /package2
            /class2.test.php

当我运行 Web 应用程序时,我loader.php首先加载并通过调用Loader::load( 'package_name' ). 然后包括所有必要的文件。这里的好处是我不需要包含loader.php在类文件中,因为我可以依赖Loader.

单元测试类通过显式包含所有必要的类来模拟这种行为。所以 phing 和 PHPUnit 也没有问题。

但现在我想用 phing 和 Xdebug 生成一个覆盖率报告。这里的问题是 phing 似乎加载了每个 PHP 文件来创建覆盖数据库。不幸的是,它停止了,因为它找不到LoaderPHP 文件中使用的类。

我可以轻松地include向每个类文件添加一条语句,但我想知道是否只有在代码覆盖率分析正在检查文件时才包含文件?

其他想法:我还可以通过扫描单元测试目录并因此找到所有必需的包含的方式来配置覆盖率分析。然后我需要过滤与类似模式匹配的类/Test$/i。可能的?

4

1 回答 1

1

我找了很长时间来寻找类似的东西。

最后,我完成了以下更改。基本上,您告诉 php cli 预先添加一个包含您的加载逻辑的 php 文件。

在我的 cli 的 php.ini 中,我设置了以下内容:

auto_prepend_file = autoload.php

我确保该文件位于我的包含路径(在我的情况下为 /usr/share/php)并在其中放入以下行(我使用 Zend Framework,它也在我的包含路径中):

require_once "Zend/Loader/Autoloader.php"; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('Model_');

现在,您可以做的是定义您的 __autoload 函数并定义需要自动加载的内容,但您明白了。

这是一个丑陋的黑客,但它为我完成了一些事情。

杰罗恩

于 2009-08-07T07:40:40.233 回答