Константы PHPUnit Tests

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

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 **/
        }
    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 313
3

Ответы 3

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

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

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

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

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

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

Другие вопросы по теме