Can phpunit use multiple data provider

丶灬走出姿态 提交于 2019-12-03 22:09:38

Just an update to the question, a pull request was accepted and now the code:

/** 
 * @dataProvider provideInvalidId
 * @dataProvider provideFailedId
 */
public function testGetByIdUnsuccess($id)
{   
    $this->assertNull($this->model->getById($id));
}

Will work on PHPUnit 5.7, you'll be able to add as many providers as you want.

You can use a helper function as shown below. The only problem is if the total number of test cases provided by all "sub data providers" is large, it can be tedious to figure out which test case is causing a problem.

/** 
 * @dataProvider allIds
 */
public function testGetByIdUnsuccess($id)
{   
    $this->assertNull($this->model->getById($id));
}  

public function allIds()
{
    return array_merge(provideInvalidId(),provideFailedId());
}

You can add a comment to your dataProvider array, to provide the same functionality, while not requiring multiple dataProviders.

public static function DataProvider()
{
    return array(
        'Invalid Id'      => array(123),
        'Failed Id'       => array(321),
        'Id Not Provided' => array(NULL),
);
}

well,you could consider it from another side ;) you know exactly what is your expected,for example getById(1) expected result is $result_expected,not $result_null so,you could make a dataprovider like this

$dataProvider = array(1, 'unexpected');

then,your test method like this:

public function testGetById($id) {
    $this->assertEquals($result_expected, $obj::getById($id));
}

so,test result is:

.F

You can also use CrossDataProviders which allows you to use a combination of data providers with each other!

<?php

/** 
 * @dataProvider provideInvalidIdAndValues
 */
public function testGetByIdUnsuccess($id, $value)
{   
    $this->assertNull($this->model->getById($id));
}   

function provideInvalidIdAndValues() {
    return DataProviders::cross(
        [[1], [2], [3]],
        [['Rob'], ['John'], ['Dennis']]
    );
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!