我正在尝试为以下方法编写测试:
/**
* @dataProvider attributesValuesProvider
*/
public function myFunction($entityObject, $diffArr, $prevArr)
{
....
....
if (is_a($entityObject, Customer::class)) {
$entityType = CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER;
} elseif (is_a($entityObject, Address::class)) {
$entityType = AddressMetadataInterface::ENTITY_TYPE_ADDRESS;
} else {
$entityType = null;
}
....
....
return $entityType;
}
我已经定义了以下数据提供者:
public function attributesValuesProvider()
{
return [
[null, [], []],
[Customer::class, [], []],
[Address::class, [], []],
];
}
我在各个方面都进行了扭曲,但我仍然想不出一种编写此测试的方法。我没有单元测试的相关经验,所以我可能走错了路。
答案 0 :(得分:1)
您的数据提供者需要提供预期的结果以及方法参数。 You can see a simple example in the PHPUnit documentation.
public function attributesValuesProvider()
{
return [
[null, [], [], null],
[new Customer, [], [], CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER],
[new Address, [], [], AddressMetadataInterface::ENTITY_TYPE_ADDRESS],
];
}
使用数据提供程序的测试将对提供程序中的每一行执行一次,并将该行中的所有值作为其参数传递。因此,您的测试只需接受所有四个参数,调用该方法并验证是否返回了预期结果。
/**
* @dataProvider attributesValuesProvider
*/
public function testMyFunction($object, $diff, $prev, $expected_result) {
$example = new YourClass();
// or maybe you already created this object in your setUp method?
$actual_result = $example->myFunction($object, $diff, $prev);
$this->assertSame($expected_result, $actual_result);
}