4

我正在寻找一种基于 CActiveRecordBehavior 对 Yii 行为进行单元测试的方法。

由于有关行为可以与许多模型一起使用,我想独立于任何模型来测试它们,但我不知道如何去做。

Yii 源使用专门为测试制作的数据库表对 CTimestampBehavior 进行了单元测试。我有很多行为要测试,并且不想为每个行为创建一个表 - 任何人都可以建议一个更好的策略来测试行为而不依赖于特定的模型或表吗?也许某种方式可以“伪造” CActiveRecord 模型?

[编辑]澄清-我不希望我的测试依赖于特定的模型或存在的数据库表-我只想测试行为。为了让事情变得更有趣,该行为附加到 onAfterConstruct 事件,因此需要在构造之前将其应用于假模型!

4

1 回答 1

2

取决于你想测试什么。

我通常这样实现它们:

private $_oBehavior
private $_oObject;
private $_oEvent

$this->_oObject   = Object::model()->findByPk(n1);
$this->_oEvent    = new CModelEvent($this->oJob);
$this->_oBehavior = new TestBehavior;
$this->_oBehavior->attach($this->_oEvent->sender);

$this->_oBehavior->afterSave($this->_oEvent);
// asserts

这样,您可以通过像事件一样实例化需要模型来测试所有需要模型的内容。所有不需要模型的东西也可以这样测试。

于 2012-11-15T22:54:23.697 回答