В модульных тестах, как вы обрабатываете именование / присваивание переменных? - PullRequest
2 голосов
/ 29 декабря 2010

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

Как в этих случаях объявлять, присваивать имена и назначать эти переменные?

Например, с учетом контекстаHTML-парсера, который принимает в качестве входных данных URL-адрес:

string google = "http://google.com"

Я говорю о том, что означает переменную, но не о том, почему я использую ее специально (т. е. почему я не использую Yahoo,вместо этого?), в контексте теста.

string someUrl = "http://google.com";

Здесь я говорю, что это «некоторый URL», так что он, вероятно, не важен для целей тестирования.Тем не менее, мне пришлось выбрать какой-то URL.

string someUrl = SomeUrl(); // in this method I just return "http://google.com"

Здесь я заявляю, что URL-адрес не важен, и я скрываю значение переменной в методе, вероятно, не отвлекая читателя теста от неважных деталей.

Верны ли мои рассуждения?Есть ли другие способы решения этой проблемы?

Как вы справляетесь с этим в своих юнит-тестах?

Ответы [ 4 ]

2 голосов
/ 29 декабря 2010

Назовите переменную так, чтобы она сообщала намерение.

  • Если значение переменной не имеет значения, я бы назвал его anyUrl = ... Также, если это не имеет значения, я бы тоже не использовал переменную (если только встроенное значение не ухудшает читабельность)
  • Если значение переменной является особенным по какой-то причине и имеет значение для текущего теста, то я бы попросил имя передать это urlWithHyphens = .... Я также пытаюсь ввести локальную константу с помощью SCREAMING_CAPS (например, VALUE_OVER_THRESHOLD_OF_2_MINS) просто для акцента.

Как и в случае с ОО, добрые имена - это полдела с удобочитаемостью и удобством обслуживания.

2 голосов
/ 29 декабря 2010

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

DEVENTER (n) Решение, которое очень трудно принять, потому что такот этого мало что зависит, например, от того, какой путь прогуляться по парку

- Дуглас Адамс и Джон Ллойд. Более глубокое значение Лиффа.

1 голос
/ 29 декабря 2010

Если в методе я использую только один URL, то это URL-адрес. Если я использую больше, то это либо var url1, var url2, либо var urlGoogle, var urlYahoo. Держите это коротким, все еще значащим, и не думайте слишком об этом.

1 голос
/ 29 декабря 2010

Вы можете выбрать любое имя, которое вам нравится.Это на самом деле не имеет значения!

Итак, имена вроде someSomething в порядке, и жестко закодированные тестовые значения тоже хороши.

Единственное соглашение, которое я соблюдаю, - это выбор значениясам.Я часто видел, как разработчики в течение нескольких минут думали, скажем, какими должны быть firstName и lastName объекта User.Решение состоит в том, чтобы просто иметь небольшой набор ваших собственных значений по умолчанию, которые вы всегда используете.Для меня, если это пользователь, который является администратором, это определенно Чак Норрис.Это экономит ваше время и делает ваши сценарии более последовательными, но даже это не обязательно.(Однако, поскольку вы выбрали свой URL-адрес http://www.google.com", похоже, вы уже это делаете).

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