@Donald_Duck

Как проверить, что массив содержит только значения типа integer или float?

Здравствуйте!

Не могу понять как это можно сделать для нескольких типов. assertContainsOnly() проверяет только на какой-то один тип. Я так понял, что это нужно делать с помощью assertThat(), но как правильно составить не могу понять.

Допустим, есть массив [28, 1, 7.3]. Как проверить, что он точно содержит значения только типа integer или float?
  • Вопрос задан
  • 491 просмотр
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
Костыльно, но работает, ищу более элегантное решение
Кратко -- генерим из массива значений массив массивов, в каждом из которых лежит тип элементов начального массива и итерируем тест по каждому типу, сравнивая с необходимыми типами

Примечание 1: тип float единственный отдается как double: php.net/manual/ru/function.gettype.php

Примечание 2: Если в проверяемом массиве много значений, то нужно сделать так, чтобы провайдер возвращал только массивы с уникальными типами

/**
     * @dataProvider providerTypesOfArraysElements
     */
    public function testTypeInArray($type)
    {
        $typesCorrect = ['integer', 'double'];
        $this->assertContains($type, $typesCorrect);
    }

    public function providerTypesOfArraysElements()
    {
        $arr = [28, 1, 7.3];

        return array_map(function($val) {
            return [gettype($val)];
        }, $arr);
    }

Скрин успешного
5b4c72b0aee63855546159.png
Скрин неуспешного
5b4c75ba049b8949436369.png
Скрин неуспешного
5b4c76202ce06299115373.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы