我有两个不同的数据提供者,我想使用两个数据提供者的数据作为我的测试用例。
我在dataProviders部分做了一个数组合并
public function provider_data() {
$data1 = $this->getData('home_data');
$data2= $this->getData('data2');
$newarray = array_merge($data1, $data2);
return $newarray;
}
但是我看到我的测试用例正在执行两次,我注意到测试用例实际上是针对每个数组(Data1和Data2)分别执行的,但它们是合并的。我在这做错了什么?我应该如何组合2个数据提供者(两个数据提供者都有完全不同的输入数据格式)
答案 0 :(得分:2)
您需要做的事情不仅仅是一个简单的array_merge
。数据提供程序提供了一个数组,其中每个条目都是一个单独的测试用例。每个测试用例都是一个包含参数的数组。像这样:
'testCase 1' => array(
0 => argument 1,
1 => argument 2
),
'testCase 2' => array(
0 => argument 1,
1 => argument 2
),
由于您说测试正在运行两次,因此每个数据提供者必须只提供一个条目。 array_merge
将第二个数据提供程序数组附加到第一个数组,生成两个测试用例。如果要组合每个数据提供者提供的数据,则需要执行以下操作:
public function provider_data() {
$data1 = $this->getData('home_data');
$data2 = $this->getData('data2');
$testCases = array();
foreach ($data1 as $key => $arguments) {
$testCases[] = array_merge($arguments, $data2[$key]);
}
return $testCases;
}
这将获取第二组数据中的参数,并将其附加到第一组数据中。现在,您的测试将收到来自两个数据提供者的组合参数。
这假设两个数据数组的长度相同。如果它们可能不存在,则需要添加一些逻辑来处理该情况。还要记住参数列表,PHPUnit不会引用用于将参数与变量匹配的键。它仅基于数组中值的顺序。因此,请谨慎使用测试用例中的参数。
答案 1 :(得分:0)
我想我会发布这个答案,试图合并两个不同长度的数组。我用过这个逻辑
$data1 = $this->loadData('data1');
$data2 = $this->loadData('data2');
$newarray = array();
foreach($data1 as $key1 => $value1){
foreach ($data2 as $key2 => $value2) {
$newarray[] = array_merge($value2, $data1[$key1]);
}
}
return $newarray;