2014-03-14 122 views
-1

我正在使用Yii 1.1.7。我剛剛介紹了Yii的單元測試,我已經安裝並配置了PHPUnit。我可以成功運行一些基本測試。我想知道如何(如果可能),我可以使用數據提供者來執行我的測試。Yii單元測試中的數據提供者

這裏是我的樣品測試類:

<?php 

    require_once('bootstrap.php'); 

    class SampleControllerTest extends CTestCase{ 

/* 
* @dataProvider provider 
*/ 
public function testSampleMethod($param1,$param2,$param3,$param4) 
{ 
    $this->assertGreaterThan(0,$ApplicationID); 
} 


public function provider() 
{ 
    return array(
     array("1875","1","1","False"), 
     array("1874","1","1","False"), 
     array("1415","1","1","False"), 
     array("1414","1","1","False"), 
     array("1413","1","1","False"), 
    ); 

} 


    } 

?> 

當我運行PHPUnit的測試,我得到以下錯誤:

缺少參數1 SampleController :: testSampleMethod()

我知道功能測試對於控制器和模型的單元測試更好。我只是想讓數據提供者運行。

在此先感謝。

+0

對不起,錯誤是**缺少SampleControllerTest :: testSampleMethod()的參數1 ** – Ruwenzori

+0

對不起,但testSampleMethod中的代碼是:** $ this-> assertGreaterThan(0,$ param1); * * – Ruwenzori

回答

1

testSampleMethod因爲您的方法名稱以單詞測試開始,那麼它在運行測試時由Yii運行。但它不能有參數,因爲它會自動調用,Yii怎麼知道你想用什麼數組來調用這個函數。

你或許可以做一個類似

/* 
* @dataProvider provider 
*/ 
public function checkSampleMethod($param1,$param2,$param3,$param4) 
{ 
    $this->assertGreaterThan(0,$ApplicationID); 
} 

/* 
* @dataProvider provider 
*/ 
public function testSampleMethod() 
{ 
    foreach($this->provider() as $params) { 
     list($param1, $param2, $param3, $param4) = $params; 
     $this->checkSampleMethod($param1,$param2,$param3,$param4); 
    } 
} 

什麼的。

+0

這是有效的,我不知道這是否是正確的方法,但它運行測試。謝謝Mihai P,一種非常有趣的執行測試的方式。 – Ruwenzori

+1

你可能會嘗試夾具而不是你的功能。另外我看到你正試圖用phpunit(不含硒)測試控制器。我發現這些鏈接告訴你如何執行http://mattmccormick.ca/2012/09/14/unit-testing-url-routes-in-yii-framework/ http://insperedia.blogspot.com。 au/ http://enginedave.wordpress.com/2011/07/09/writing-a-simple-unit-test/。我還沒有嘗試過,因爲我的硒測試正在運行,但運行速度很慢,所以我可能會放棄這些。 –

+0

當然,沒有硒的測試不會測試Yii帶來的所有javascript好東西。 –