2014-05-21 61 views
1

我爲我的應用程序進行UnitTesting。Symfony2:PHPUnit測試 - > @dataProvider不發送multipleArray

我有一個save saveArticleIds()方法,我爲它寫了一個測試 - > testSaveArticelIds()。我有一個dataProvider articelIdsArray()與多個數組。該函數需要像這樣的數組。

/** 
* 
* @dataProvider articleIdsArray 
* 
*/ 
public function testSavearticleIds($articleIds) { 

    $articleIdObjekt = new ArticleIdHandler(); 
    $result = $articleIdObjekt->saveArticleIds($articleIds,false); 

    $this->assertTrue($result); 
} 

public function articleIdsArray() { 
    return array(
     array(
      10552 => 10552, 
      14314 => 14314, 
      21034 => 21034, 
      22739 => 22739, 
      34568 => 34568, 
      34572 => 34572, 
      35401 => 35401, 
      38292 => 38292, 
      55141 => 55141, 
      161764 => 161764, 
      181589 => 181589 
     ) 
    ); 
} 

當我運行我的測試,我得到這個錯誤:

There was 1 error: 1) My\Bundle\ArticleBundle\Tests\Article\ArticleIdHandlerTest::testSaveArticleIds 
with data set #0 (10552, 14314, 21034, 22739, 34568, 34572, 35401, 38292, 55141, 161764, 181589) 
Invalid argument supplied for foreach() 

爲什麼它顯示陣列像我有數組中沒有鑰匙?我需要的數組與我的dataProvider完全一樣!任何想法??感謝您的幫助!

+0

請爲'saveArticleIds提供源代碼($ articleIds,假)'。 – Syjin

回答

-1

您不需要在您的示例中使用@dataProvider。

定義你的方法是這樣

public function getArticleIdsArray() { 
    return array(
    10552 => 10552, 
    14314 => 14314, 
    21034 => 21034, 
    22739 => 22739, 
    34568 => 34568, 
    34572 => 34572, 
    35401 => 35401, 
    38292 => 38292, 
    55141 => 55141, 
    161764 => 161764, 
    181589 => 181589 
); 
} 

,並在測試中使用它

public function testSavearticleIds($articleIds) { 

    $articleIdObjekt = new ArticleIdHandler(); 
    $result = $articleIdObjekt->saveArticleIds($this->getArticleIdsArray(),false); 
    $this->assertTrue($result); 
} 
+0

不工作,得到相同的錯誤,但每個ID 11次!太糟糕了。 – Zwen2012

+0

錯誤提示:數據集#10552無效。 – Zwen2012

+0

不要寫這個@dataProvider articleIdsArray –

1

也許試試這個:

public function articleIdsArray() 
{ 
    return 
    array(
     array(
      array(
       10552 => 10552, 
       14314 => 14314, 
       21034 => 21034, 
       22739 => 22739, 
       34568 => 34568, 
       34572 => 34572, 
       35401 => 35401, 
       38292 => 38292, 
       55141 => 55141, 
       161764 => 161764, 
       181589 => 181589 
      ) 
     ) 
    ); 
} 

的原因是數組的第一個層次嵌套是爲每一輪測試提供的一組數據,第二層代表提供給testS的參數avearticleIds,與函數的參數列表中的順序相同(在你的例子中只有一個參數),最後一層只是測試數組本身。

希望這有助於...

+0

不,不幸的是沒有...!現在,我的工作類中出現了一個錯誤,該錯誤在我的ArticleIdHandler類中調用。 – Zwen2012

+1

這可能是一個'合法'測試失敗?當我嘗試我使用的代碼: '公共功能testSavearticleIds($ articleIds){print_r($ articleIds); $這個 - > assertTrue(TRUE); } 並得到了預期的數組輸出... 對不起格式化,可以很好地顯示它... – malte

0

試試這個:

/** 
* @dataProvider articleIdsArray 
*/ 
public function testSavearticleIds($articleIds) 
{ 
    $articleIdObjekt = new ArticleIdHandler(); 
    $result = $articleIdObjekt->saveArticleIds($articleIds,false); 

    $this->assertTrue($result); 
} 

public function articleIdsArray() 
{ 
    return array(
     'scenario_one' => 10552, 
     'scenario_two' => 14314, 
     ..., 
    ); 
}