Unit testing Symfony2:PHPUnit测试->@dataProvider不发送多路播放

Unit testing Symfony2:PHPUnit测试->@dataProvider不发送多路播放,unit-testing,symfony,phpunit,dataprovider,Unit Testing,Symfony,Phpunit,Dataprovider,我为我的应用程序进行单元测试 我有一个save saveArticleIds()方法,我为它编写了一个测试->testsavearticleids()。我有一个带有多个数组的数据提供程序articelIdsArray()。函数需要像这样精确的数组 /** * * @dataProvider articleIdsArray * */ public function testSavearticleIds($articleIds) { $articleIdObjekt = new A

我为我的应用程序进行单元测试

我有一个save saveArticleIds()方法,我为它编写了一个测试->testsavearticleids()。我有一个带有多个数组的数据提供程序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

像这样定义您的方法

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);
}
也许可以试试这个:

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
            )
        )
    );
}
原因是数组嵌套的第一级是为每一轮测试提供的数据集,第二级表示提供给TestSaveArticleId的参数,顺序与函数的参数列表相同(在您的示例中只有一个参数),最后一级只是测试数组本身

希望这有帮助…

试试这个:

/**
 * @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,
        ...,
    );
}

不工作,得到相同的错误,但每个Id 11次!太糟糕了。错误显示:数据集#10552无效。请不要编写此@dataProvider articleIdsArrayNo,不太可能。。。!现在我在我的工作类中得到了一个错误,它在我的ArticleIdHandler类中被调用。这可能是“合法”测试失败吗?当我尝试我使用的代码时:`public function testSavearticleIds($articleIds){print_r($articleIds);$this->assertTrue(true);}并得到预期的数组作为输出。。。很抱歉设置了格式,无法很好地显示它…请提供
saveArticleIds($articleIds,false)
的源代码。