phpunit 可以使用多个数据提供程序吗?

2022-08-30 12:17:05

简而言之:phpunit在运行测试时可以使用多个数据提供者吗?

例如,我有一个名为getById的方法,我需要为它运行成功和不成功的测试用例。

成功的测试用例意味着它可以返回相应的记录。对于不成功,输入可以分为两类:无效和失败。

无效表示输入不合法,而失败表示输入可能有效,但没有具有该 ID 的相应记录。

所以代码是这样的:

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

但事实证明,只使用了第一个数据提供者,忽略了第二个。虽然我不确定这个塞纳里奥是否常见,但这就是问题所在。我们可以使用多个数据提供者吗?如果可以,如何做到?

PS:在这里没有找到太多的帮助


答案 1

只是对问题的更新,一个拉取请求被接受,现在是代码:

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

将在PHPUnit 5.7上运行,您将能够根据需要添加任意数量的提供程序。


答案 2

您可以使用帮助程序函数,如下所示。唯一的问题是,如果所有“子数据提供者”提供的测试用例总数都很大,那么找出哪个测试用例导致问题可能会很繁琐。

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

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

推荐