PHPUnit Тестирует константы - PullRequest
0 голосов
/ 30 мая 2018

У меня есть класс с константой:

class LoremIpsum {
  const VALUE = '123';

  public function MethodThatUsesConstant()  {
    ...
  }
}

Когда я хочу провести модульное тестирование метода, использующего эту константу, я должен использовать константу из реального класса или создать новую константу вТестовый класс с тем же значением, что и действительная константа?

Пример:

class LoremIpsumTest {
    const VALUE = '123';

    public function testMethodThatUsesConstant() {
       ...
    }
}

или

class LoremIpsumTest 
{
     //this test uses the real constant

        public function testMethodThatUsesTheRealConstant() {
           /**$const = \Namespace\LoremIpsum::VALUE **/
        }
    }

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Я бы использовал фактическую константу для моих тестов, но это зависит от того, для чего вы используете константу.В ваших примерах недостаточно контекста для конкретного случая использования.

Если вы используете значение константы в качестве возвращаемого идентификатора, я бы использовал реальную константу в моих тестах.Когда я проверяю значение возвращаемого значения, не имеет значения, что является фактическим значением, но что это эта константа.Существование константы является частью открытого интерфейса класса и проверки того, что значение гарантирует, что оно действительно существует.Изменение этого значения не меняет поведение класса, поэтому тесты всегда должны проходить.

Если константа используется в вычислениях, я бы об этом не беспокоился.В этом случае константа становится деталью реализации.В этом случае я бы хотел, чтобы мои тесты действительно рассчитывали значения для данного набора входных данных.Может показаться, что выполнение теста для меня удобно, но существует риск дублирования математической ошибки, поскольку вы, скорее всего, скопируете и вставите алгоритм.Так что в этих тестах я бы вообще не использовал никаких констант.

0 голосов
/ 30 мая 2018

Это зависит от того, что представляет эта константа.Если это бизнес-требование (например, «виджет должен отображать 20 строк на страницу» и const ROWS_PER_PAGE = 20), вы НЕ должны повторно использовать эту константу в тесте.Изменение кода не должно изменять бизнес-требований (которые должны быть представлены тестами).Создание такой зависимости может сделать весь тест совершенно бессмысленным - я могу изменить ROWS_PER_PAGE на 10, и тест пройдет, если требования ясны, что на странице должно быть 20 строк.

И да, этоне выглядит СУХОЙ, но в этом весь смысл тестов - вы создаете два разных представления одного и того же требования: код, отображающий 20 строк на страницу, и тест, проверяющий наличие 20 строк на странице.Тестирует дублирующийся код по своему дизайну, вам не нужно слишком беспокоиться о дублированных константах.

0 голосов
/ 30 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...