gpt4 book ai didi

zend-framework - ZF-Autoloader 在 Ubuntu 上的 UnitTests 中不起作用

转载 作者:行者123 更新时间:2023-12-04 05:40:35 24 4
gpt4 key购买 nike

我在 Ubuntu 12.04 下对 Zend-Framework 应用程序进行单元测试时遇到问题。项目结构是默认的 zend 应用程序,而模型定义如下

./application
./models
./DbTable
./ProjectStatus.php (Application_Model_DbTable_ProjectStatus)
./Mappers
./ProjectStatus.php (Application_Model_Mapper_ProjectStatus)
./ProjectStatus.php (Application_Model_ProjectStatus)

这里的问题是特定于 Zend 的自动加载。这里的命名约定出现文件夹 映射器 使用 加载所有类_映射器但不是 _映射器 .这是 Zend 的一些内部行为,到目前为止还不错。

在我的 Windows 机器上,phpunit 运行没有任何问题,试图启动所有这些类。

但是在我的 Ubuntu 机器上运行 jenkins 时,phpunit 找不到合适的类,给我以下错误
Fatal error: Class 'Application_Model_Mapper_ProjectStatus' not found 
in /var/lib/jenkins/jobs/PAM/workspace/tests/application/models/Mapper/ProjectStatusTest.php
on line 39

错误似乎真的是 Zend-Autoloader 没有从 ubuntu 机器加载,但我无法弄清楚它是如何或为什么起作用的。问题仍然是为什么会这样。我想我已经仔细检查了与 zend 自动加载内容的每个联系点,但我就是想不通。我将粘贴 - 从我的角度来看相关的片段 - 并希望你们中的某个人对此有任何见解。

PHPUnit 的 Jenkins 代码段
 <target name="phpunit" description="Run unit tests with PHPUnit">
<exec executable="phpunit" failonerror="true">
<arg line="--configuration '${basedir}/tests/phpunit.xml' --coverage-clover '${basedir}/build/logs/clover.xml' --coverage-html '${basedir}/build/coverage/.' --log-junit '${basedir}/build/logs/junit.xml'" />
</exec>
</target>

./tests/phpunit.xml
<phpunit bootstrap="./bootstrap.php">
... this shouldn't be of relevance ...
</phpunit>

./tests/bootstrap.php
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));

require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();

任何帮助将不胜感激。

最佳答案

我实际上认为问题在于您的“models/Mappers”文件夹。它应该是“模型/映射器”(全部小写),并解释为什么它适用于 Windows 而不是 Linux。

从 Zend_Application_Module_Autoloader 类可以看出:

$this->addResourceTypes(array(
'dbtable' => array(
'namespace' => 'Model_DbTable',
'path' => 'models/DbTable',
),
'mappers' => array(
'namespace' => 'Model_Mapper',
'path' => 'models/mappers',
),

但是,根据我之前的回答,我仍然相信您需要引导应用程序以自动添加所有默认资源

关于zend-framework - ZF-Autoloader 在 Ubuntu 上的 UnitTests 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11305780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com