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 に答える