如何让PHPUnit识别库

时间:2014-04-30 14:31:23

标签: eclipse phpunit zend-studio

我们正在使用Zend Studio(Eclipse),并尝试在我们的代码上运行PHPUnit。我们最近致力于从“供应商”中移除代码。将源文件夹放入IDE包含的库中。因此,我们的所有自动完成工作都会按预期进行构建。

但是,我们的PHPUnit测试没有看到包含的库。测试失败,错误为"未定义的类"在我们使用的第一个实例中。

当库包含在代码本身中时,测试工作正常。因此,我们正试图弄清楚如何让他们与图书馆合作。

1 个答案:

答案 0 :(得分:0)

在我看来,您的phpunit配置未设置为自动加载您的库。我相信您不应该将代码从vendor/目录移动到library/目录,因为这是由Composer自动配置的(因为您有vendor/目录我假设您也使用Composer)因此,每次更新“供应商”软件包时,您现在需要复制/粘贴内容。

Composer的美妙之处在于它在vendor/目录中还创建了一个autoload.php文件,您可以将其用作phpunit的引导程序(或包含在另一个引导程序中)。

示例引导仅供应商包(如果phpunit.xml在app根目录中):

<?xml version="1.0" encoding="utf-8"?>
<phpunit bootstrap="vendor/autoload.php" haltOnFailure="true" haltOnError="true">
   ...
</phpunit>

src/中的示例引导项目引导程序(如果phpunit.xml在app根目录中):

<?xml version="1.0" encoding="utf-8"?>
<phpunit bootstrap="src/MyProject/Bootstrap.php" haltOnFailure="true" haltOnError="true">
   ...
</phpunit>  

此示例项目的引导程序可能如下所示:

<?php

defined ('APP_ROOT') ||
   define('APP_ROOT', dirname(__DIR__) . '/../');
$paths = array (
   APP_ROOT . '/src',
   APP_ROOT . '/vendor',
   get_include_path(),
);
set_include_path(implode(PATH_SEPARATOR, $paths));

/**
 * @see autoload.php
 */
require_once 'autoload.php';

...