2012-11-15 70 views
2

我正在尋找一種基於CActiveRecordBehavior的單元測試Yii行爲的方法。由於有關的行爲可以與許多模型一起使用,所以我想獨立於任何模型來測試它們,但是我不知道如何去做。單元測試Yii Behaviors

Yii源使用特別爲測試製作的數據庫表給出CTimestampBehavior的單元測試。我有很多行爲需要測試,不想爲每個表創建一個表 - 任何人都可以提出一個更好的策略來測試行爲而不依賴於特定的模型或表?也許某種方式來「僞造」CActiveRecord模型?

澄清 - 我不希望我的測試依賴於特定的模型或數據庫表存在 - 我只想測試行爲。只是爲了讓事情變得更有趣,行爲會附加到onAfterConstruct事件上,所以在構造之前需要將它應用於假模型!

回答

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 

這樣,您就可以測試通過實例化它像一個事件需要一個模型中的所有東西。所有不需要模型的東西也可以像這樣測試。

+0

謝謝,但問題是需要某種模型對象。這就是問題的關鍵,我不想測試我的行爲是否依賴於我,而不是更改可用的模型和表格。在你的例子中,我需要弄清楚「對象」是什麼 – Hippyjim

+1

你可以做的是創建一個從CModel擴展的模擬對象類。這樣你就不需要任何表格更改 – ThomasVdBerge

+0

啊,是的,我現在看到了。謝謝。 – Hippyjim