Задайте себе следующий вопрос: Как бы вы документировали свою функцию для пользователя?
A) Предположим, что ваша документация идет в следующем направлении:
"GetEntity
будет создайте новый объект с содержимым по умолчанию. Name
будет присвоено содержимое Constants.EntityName
, что означает, что позже в коде вы можете проверить, имеет ли Name
значение по умолчанию, сравнив его с Constants.EntityName
. "
Как видите, в данной документации пользователь не информирован о действительном значении Constants.EntityName
. Фактическое значение не имеет значения. В этом случае я бы порекомендовал также сравнить с Constants.EntityName
в ваших тестах. Причина: фактическое значение не имеет значения, и клиентский код не должен заботиться о фактическом значении.
B) Предположим, что вы бы задокументировали свою функцию следующим образом:
" GetEntity
создаст новую сущность с содержимым по умолчанию. Name
будет предоставлено содержимое Constants.EntityName
, что составляет 'ConstantEntityNameValue'
. [...] ".
В этом случае Я рекомендую иметь как минимум два тестовых случая: одно тестирование, чтобы атрибут Name
равнялся Constants.EntityName
, и второе тестирование, чтобы проверить, что Constants.EntityName
равно 'ConstantEntityNameValue'
. Причина: литерал является частью спецификации, поэтому клиентский код может его использовать. Однако в документации есть различие: для чего задокументирована функция (создание объекта с использованием Constants.EntityName
) и значение константы.
C) Наконец, предположим, что ваша функция задокументировано следующее:
"GetEntity
создаст новый объект с содержимым по умолчанию. Name
будет присвоено значение 'ConstantEntityNameValue'
. [...]".
В этом случае вы должны сравнить с литералом 'ConstantEntityNameValue'
в вашем тесте. Причина: будет написан код клиента, который использует этот литерал для сравнения, поэтому в своем тесте вы должны убедиться, что функция действительно использует этот литерал и для будущих выпусков.