У меня есть функция, которая возвращает массив массив записей после их обработки. Ожидаемое возвращаемое значение выглядит примерно так:
[
[....]
['Name', 'Quantity', 'Tags', 'Price', 'Total', 'Autogenerated Value']
[....]
[....]
]
поле Autogenerate Value
может быть все, что генерируется динамически.
В настоящее время я пытаюсь использовать assertEquals
методы, но каждый раз, когда значение автоматического генерирования будет отличаться. Это что-то вроде совпадения anything()
что я могу использовать здесь.
Я на самом деле не хочу писать свою собственную функцию утверждения, повторяя ожидаемое значение и утверждая, используя assertArraySubset
Это пока невозможно, но вы можете расширить 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 должен оценивать ограничения, а не сравнивать их, где бы они ни возникали.
Я на самом деле не хочу писать свою собственную функцию утверждения, повторяя ожидаемое значение и утверждая, используя assertArraySubset.
Но почему нет?
Если вы не хотите, чтобы в ваших журналах было много утверждений, вы можете ограничить метод подтверждения PHPUnit_Framework_ExpectationFailedException
в случае, если что-то пойдет не так (то есть, если константная часть массива отсутствует или если последний динамически сгенерированный элемент не имеет ожидаемого значения) с содержимым точного проблемного элемента.