2016-09-05 33 views
1

我有一个函数返回处理它们后的记录数组数组。预期的返回值看起来是这样的 -phpunit任何内部数组匹配器

[ 
    [....] 
    ['Name', 'Quantity', 'Tags', 'Price', 'Total', 'Autogenerated Value'] 
    [....] 
    [....] 
] 

可以动态生成Autogenerate Value任何领域。

目前我正在尝试使用assertEquals方法,但每次自动生成的值都会有所不同。这里有匹配器anything(),我可以在这里使用。

我真的不想写了预期值我自己的断言功能迭代和使用assertArraySubset

回答

0

这是不可能还断言,但你可以扩展PHPUnit到阵列中评估的约束:

  • 编写自定义Comparator实现这样

    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); 
        } 
    
  • 添加COMPAR ATOR在引导文件有:

    SebastianBergmann\Comparator\Factory::getInstance()->register(new ConstraintComparator); 
    

现在的PHPUnit应该评估的约束,而不是在任何地方发生比较它们的。

0

我真的不想写我自己的断言功能遍历期望值和使用assertArraySubset

但为什么不能断言?

如果你不想在你的日志中发现很多断言,你可以限制你的断言方法来抛出PHPUnit_Framework_ExpectationFailedException以防万一发生错误(例如,如果数组的常量部分不存在或者最后一个动态生成的元素不是期望值)与确切问题元素的内容。