2013-03-24 1 views
1

Yii 로깅 시스템이 내장되어 있습니다. 어떤 경우에는 로깅이 제대로 수행되었는지, 즉 올바른 메시지가 "오류"또는 "경고"로 기록되는지 확인하려고합니다. phpunit 테스트 케이스에서 어떻게 이러한 메시지를 읽을 수 있습니까?Yii 로그 메시지를 phpunit에 어설 션하는 방법

예제 코드 :

public function actionDownload($id) 
{ 
    $order = self::$dic->get('StoreOrder')->findByPk($id); 
    $logged = Yii::app()->user->getState('usermodel'); 
    if(!isset($order->id_user)) 
    { 
     Yii::log("could not get user id from order $id","error"); 
     return false; 
    } 
    if(!isset($logged->id_user)) 
    { 
     Yii::log("could not get user id from from session","error"); 
     return false; 
    } 
    # other code... 
} 

나는 올바른 Yii::log 특정 시험 조건에서 발사되었는지 확인해야합니다.

+0

예는 도움이 될 것입니다. – Jon

+0

추가 된 예입니다. 감사. – thevikas

답변

2

(예 : CTestLogRoute이라고 부름)을 새로 만들어야합니다. 이는 내부 배열에 푸시 로그 메시지와 같은 기능을 수행합니다. 그런 다음 내부 배열로 푸시 된 마지막 로그 메시지 (getLastLogEntry()이라고 함)를 가져 오는 일부 메소드를 추가하십시오.이 메시지는 assert() 문에 사용할 수 있습니다.

당신은 config 파일과 같이 당신의 단위 테스트에 특별한 로그 경로를 추가 할 수 있습니다

'components'=>array(
    'log'=>array(
    'class'=>'CLogRouter', 
    'routes'=>array(
     array(
     'class'=>'CTestLogRoute', // custom log router which will save the messages 
     'levels'=>'info, error, warning', // select the level you want piped in here 
     ), 
    ), 
), 

그런 다음 당신의 단위 테스트에서이 같은 작업을 수행 할 수 있습니다

foreach (Yii::app()->log->routes as $route) 
    if ($route instanceof CTestLogRoute) // find our log route 
    $lastLogValue = $route->getLastLogEntry(); // get the last entry 
$this->assertEquals('Expected last log value',$lastLogValue); 

내가하지 않은 그것을 시도했지만 잘 작동합니다. 나는 심지어 오류 로그 항목을 테스트하는 야망을 좋아한다!

관련 문제