phpunit что-нибудь в массиве

У меня есть функция, которая возвращает массив массив записей после их обработки. Ожидаемое возвращаемое значение выглядит примерно так:

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

поле Autogenerate Value может быть все, что генерируется динамически.

В настоящее время я пытаюсь использовать assertEquals методы, но каждый раз, когда значение автоматического генерирования будет отличаться. Это что-то вроде совпадения anything() что я могу использовать здесь.

Я на самом деле не хочу писать свою собственную функцию утверждения, повторяя ожидаемое значение и утверждая, используя assertArraySubset

1

Решение

Это пока невозможно, но вы можете расширить 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);
    }
    
  • Добавьте компаратор в ваш файл начальной загрузки с помощью:

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

Теперь PHPUnit должен оценивать ограничения, а не сравнивать их, где бы они ни возникали.

0

Другие решения

Я на самом деле не хочу писать свою собственную функцию утверждения, повторяя ожидаемое значение и утверждая, используя assertArraySubset.

Но почему нет?

Если вы не хотите, чтобы в ваших журналах было много утверждений, вы можете ограничить метод подтверждения PHPUnit_Framework_ExpectationFailedException в случае, если что-то пойдет не так (то есть, если константная часть массива отсутствует или если последний динамически сгенерированный элемент не имеет ожидаемого значения) с содержимым точного проблемного элемента.

0

По вопросам рекламы [email protected]