2012-11-15 3 views
2

CActiveRecordBehavior를 기반으로하는 단위 테스트 Yii 동작을 찾는 방법을 찾고 있습니다.단위 테스트 Yii 동작

많은 모델에서 해당 동작을 사용할 수 있으므로 어떤 모델과도 독립적으로 테스트하고 싶지만 어떻게해야 할 지 잘 모릅니다.

Yii 소스는 특히 테스트를 위해 만들어진 데이터베이스 테이블을 사용하여 CTimestampBehavior의 단위 테스트를 제공합니다. 테스트 할 행동이 많고 각 테이블에 대한 테이블을 만들지 않으려 고합니다. 특정 모델이나 테이블에 의존하지 않고 행동을 테스트 할 수있는 더 나은 전략을 제안 할 수 있습니까? CActiveRecord 모델을 "가짜 (fake)"는 어떤 방법일까요?

[편집] 명확한 설명 - 테스트가 특정 모델이나 데이터베이스 테이블에 의존하는 것을 원하지 않습니다. 동작 만 테스트하고 싶습니다. 그리고 더욱 재미있는 것을 만들기 위해서, 동작은 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

고마워요,하지만 문제는 어떤 종류의 모델 객체가 필요하다는 것입니다. 그 점이 문제가되는 점입니다. 모델과 테이블을 사용할 수 없다는 것을 제 행동으로 테스트하는 것이 제게 의존하지 않도록하고 싶지 않습니다. 귀하의 예제에서 나는 "Object"가 무엇인지 알아 내야합니다. – Hippyjim

+1

당신이 할 수있는 일은 CModel에서 연장 된 조롱 Object 클래스를 만드는 것입니다. 그런 식으로 테이블을 바꿀 필요가 전혀 없습니다. – ThomasVdBerge

+0

아, 네, 지금 봅니다. 감사. – Hippyjim

관련 문제