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应该评估约束,而不是在约束出现的任何地方进行比较

我真的不想编写自己的断言函数来迭代期望值,并使用assertArraySubset进行断言

但为什么不呢

如果您不希望日志中出现大量断言,可以将断言方法限制为抛出
PHPUnit\u Framework\u ExpectationFailedException
,以防出现任何错误(例如,如果数组的常量部分不存在,或者如果最后一个动态生成的元素不符合预期值)包含确切问题元素的内容

我真的不想编写自己的断言函数来迭代期望值,并使用assertArraySubset进行断言

但为什么不呢

如果您不希望日志中出现大量断言,可以将断言方法限制为抛出
PHPUnit\u Framework\u ExpectationFailedException
,以防出现任何错误(例如,如果数组的常量部分不存在,或者如果最后一个动态生成的元素不符合预期值)包含确切问题元素的内容