phpunit数组中的任何匹配器
我有一个函数,它在处理记录后返回一个数组。预期的返回值如下所示-phpunit数组中的任何匹配器,php,symfony,testing,phpunit,matcher,Php,Symfony,Testing,Phpunit,Matcher,我有一个函数,它在处理记录后返回一个数组。预期的返回值如下所示- [ [....] ['Name', 'Quantity', 'Tags', 'Price', 'Total', 'Autogenerated Value'] [....] [....] ] “自动生成值”字段可以是动态生成的任何内容 目前我正在尝试使用assertEquals方法,但每次自动生成的值都会不同。这里有类似于anything()的匹配器吗 我真的不想编写自己的断言函数来迭代期望值,并使用assertA
[
[....]
['Name', 'Quantity', 'Tags', 'Price', 'Total', 'Autogenerated Value']
[....]
[....]
]
“自动生成值”字段可以是动态生成的任何内容
目前我正在尝试使用assertEquals
方法,但每次自动生成的值都会不同。这里有类似于anything()
的匹配器吗
我真的不想编写自己的断言函数来迭代期望值,并使用
assertArraySubset
进行断言这还不可能,但您可以扩展PHPUnit来评估数组中的约束:
- 像这样编写一个定制的
比较器
实现
class ConstraintComparator extends SebastianBergmann\Comparator { public function accepts($expected, $actual) { return $expected instanceof \PHPUnit_Framework_Constraint; } public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false) { $expected->evaluate($actual); }
- 在引导文件中添加比较器,方法如下:
SebastianBergmann\Comparator\Factory::getInstance()->register(new ConstraintComparator);
现在,PHPUnit应该评估约束,而不是在约束出现的任何地方进行比较。这还不可能,但您可以扩展PHPUnit来评估数组中的约束:
- 像这样编写一个定制的
比较器
实现
class ConstraintComparator extends SebastianBergmann\Comparator { public function accepts($expected, $actual) { return $expected instanceof \PHPUnit_Framework_Constraint; } public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false) { $expected->evaluate($actual); }
- 在引导文件中添加比较器,方法如下:
SebastianBergmann\Comparator\Factory::getInstance()->register(new ConstraintComparator);
PHPUnit\u Framework\u ExpectationFailedException
,以防出现任何错误(例如,如果数组的常量部分不存在,或者如果最后一个动态生成的元素不符合预期值)包含确切问题元素的内容
我真的不想编写自己的断言函数来迭代期望值,并使用assertArraySubset进行断言
但为什么不呢
如果您不希望日志中出现大量断言,可以将断言方法限制为抛出PHPUnit\u Framework\u ExpectationFailedException
,以防出现任何错误(例如,如果数组的常量部分不存在,或者如果最后一个动态生成的元素不符合预期值)包含确切问题元素的内容