gpt4 book ai didi

zend-framework - PHPUnit,使用类常量改变状态

转载 作者:行者123 更新时间:2023-12-04 06:47:20 27 4
gpt4 key购买 nike

我正在学习 Zend 和 PHPUnit。

下面是我的内容


public function changeToIllegalState()
{
return array(
array( Application_Model_SomeModel::FAIL ),
array( Application_Model_SomeModel::SUCCESS )
);
}

/**
* @dataProvider changeToIllegalState
* @expectedException IllegalStateChangeException
*/

public function testIllegalStateChangeGeneratesException( $state )
{
$mapper = new Application_Model_Mapper_SomeModel();
$model = new Application_Model_SomeModel();

$model->changeState( $state );

$mapper->save( $model );

}

因此,正如您在此处所见,数据提供者提供了一些代表模型不同状态的常量。

PHPUnit 说它在 dataprovider 方法中找不到 Model 类。但是,如果我尝试在测试方法中使用常量,一切正常,没有问题。我正在使用 Zend 自动加载器来加载我的类,到目前为止一切都很顺利。我知道我可以只输入常量本身的值,但我不知道为什么会出现此错误。

我只能假设在调用 setup 方法之前调用了 dataprovider 方法,因为我在 setup 方法中完成了所有自动加载业务。

编辑:

我也尝试了以下方法,但它仍然不适用于类常量。



protected $_FAIL;
protected $_model;

public function setUp()
{
parent::setUp();
$this->_model = new Application_Model_SomeModel();
$this->_FAIL = Application_Model_SomeModel::FAIL;
}

现在,当我尝试在提供程序方法中使用 $_FAIL 时,我得到一个 NULL 值,而不是我期望的“失败”字符串。这真的很奇怪。

最佳答案

PHPUnit 实例化所有将在运行任何测试之前运行的测试用例。

  • 每个测试方法一个,没有数据提供者。
  • 每个数据提供者方法一个。
  • 从每个数据提供者返回的每个参数数组一个,因此返回一个包含四个数组的数组的提供者将获得四个测试用例实例。

假设您在 bootstrap.php 中设置自动加载器,它应该加载包含这些常量的类。但是,我会尝试进行测试以查看:

public function changeToIllegalState()
{
require_once 'Zend/Loader/Autoloader';
Zend_Loader_Autoloader::getInstance();

return array(
array( Application_Model_SomeModel::FAIL ),
array( Application_Model_SomeModel::SUCCESS )
);
}

或者 Zend Framework 是否将模型的目录添加到测试用例的 setUp() 方法之一的包含路径中?

关于zend-framework - PHPUnit,使用类常量改变状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5561844/

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