我正在寻找一种基于CActiveRecordBehavior对Yii行为进行单元测试的方法。
由于有关行为可以与许多模型一起使用,我想独立于任何模型测试它们,但我无法弄清楚如何去做。
Yii源使用专门用于测试的数据库表对CTimestampBehavior进行单元测试。我有很多行为需要测试,并且不想为每个行为创建一个表 - 任何人都可以建议一个更好的策略来测试行为而不依赖于特定的模型或表吗?也许某种方式“伪造”CActiveRecord模型?
[编辑]澄清 - 我不希望我的测试依赖于存在的特定模型或数据库表 - 我只想测试行为。只是为了让事情变得更有趣,这个行为会附加到onAfterConstruct事件上,因此需要在构造之前将其应用于假模型!
答案 0 :(得分: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
通过这种方式,您可以通过将其实例化为事件来测试需要模型的所有内容。所有不需要模型的东西也可以像这样进行测试。