【问题标题】:Unit test Yii Behaviors单元测试 Yii 行为
【发布时间】:2012-11-15 15:54:51
【问题描述】:

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

由于相关行为可以用于许多模型,我想独立于任何模型来测试它们,但我不知道该怎么做。

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

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

【问题讨论】:

    标签: php unit-testing yii


    【解决方案1】:

    取决于您要测试的内容。

    我通常这样实现它们:

    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
    

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

    【讨论】:

    • 谢谢,但问题是这需要某种模型对象。这就是问题的重点,我不希望测试我的行为依赖于我不改变可用的模型和表格。在您的示例中,我需要弄清楚“对象”是什么
    • 您可以做的是创建一个从 CModel 扩展的模拟对象类。这样您就不需要任何表格更改
    • 啊,是的,我现在看到了。谢谢。
    猜你喜欢
    • 2012-06-15
    • 2014-06-20
    • 2013-09-28
    • 2013-08-03
    • 2014-05-10
    • 2014-03-14
    • 2012-10-23
    • 2015-07-23
    • 2015-03-03
    相关资源
    最近更新 更多