Каталог Антишаблонов поблочного тестирования

203
задан 4 revs, 2 users 100% 24 June 2014 в 19:18
поделиться

28 ответов

Вторые Граждане Класса - тестовый код не также пересмотрен как производственный код, содержа много дублированного кода, будучи сложно поддерживать тесты.

70
ответ дан Ilja Preuß 23 November 2019 в 04:55
поделиться

Родительский элемент Hen - Frank Carver
А для общей установки, которая делает намного больше, чем фактические тестовые сценарии, нужно. Например, создание всех видов сложных структур данных заполнило с по-видимому важными и уникальными значениями, когда тесты только утверждают для присутствия или отсутствия чего-то.
Усовершенствованный Признак: Неуместно Общее Приспособление

я не знаю то, что оно делает... Я добавляю его так или иначе на всякий случай. - Анонимный Разработчик

7
ответ дан 3 revs, 2 users 83% 23 November 2019 в 04:55
поделиться

Doppelgänger

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

Этот шаблон указывает на нездоровую сумму скрытых зависимостей, которыми Вы не можете управлять от теста.

я посмотрел на его поверхность... моя поверхность! Это было похоже на зеркало, но заставило мою кровь заморозиться.

9
ответ дан 2 revs 23 November 2019 в 04:55
поделиться

Сорокафутовый Тест полюса

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

10
ответ дан 2 revs, 2 users 67%bhumphreys 23 November 2019 в 04:55
поделиться

Тест Тьюринга

тестовый сценарий А, автоволшебно сгенерированный некоторым дорогим инструментом, который имеет многих, многие утверждают подбираемый из класса под тестом с помощью некоторого too-clever-by-half анализа потока данных. Разработчики затиший в ложное чувство уверенности, что их код хорошо тестируется, освобождая их от ответственности разработки и поддержания высококачественных тестов. Если машина может записать тесты для Вас, почему не может он вытаскивать свой палец и писать само приложение!

Привет глупый. - самый умный компьютер В мире новому ученику (от старого комика Amiga).

10
ответ дан 3 revs, 2 users 57%bhumphreys 23 November 2019 в 04:55
поделиться

Экологический Вандал

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

, Эти тесты будут неустойчивы, и оставят разработчиков, говорящих вещи как 'просто выполненный это снова'.

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

10
ответ дан 4 revs, 3 users 83% 23 November 2019 в 04:55
поделиться

Секретный Ловец - Frank Carver
тест А, который на первый взгляд, кажется, не делает никакого тестирования, из-за отсутствия утверждений. Но "Дьявол находится в деталях".. тест действительно полагается на исключение, которое будет брошено, и ожидает, что среда тестирования получит исключение и сообщит о нем пользователю как отказ.

[Test]
public void ShouldNotThrow()
{
   DoSomethingThatShouldNotThrowAnException();
}
10
ответ дан Gishu 23 November 2019 в 04:55
поделиться

Кукушка - Frank Carver
модульный тест А, который находится в тестовом сценарии с несколькими другими и обладает тем же (потенциально долгим) процессом установки как другие тесты в тестовом сценарии, но тогда отбрасывает некоторых или все артефакты от установки и создает его собственное.
Усовершенствованный Признак: Неуместно Общее Приспособление

11
ответ дан 5 revs, 4 users 67% 23 November 2019 в 04:55
поделиться

Спящий, иначе Смонтируйте Везувий - Nick Pellow

тест А, который предназначен для СБОЯ в некоторое определенное время и дату в будущем. Это часто вызывается неправильными границами, проверяющими при тестировании кода, который использует объект Даты или Календаря. Иногда, тест может перестать работать, если выполнено в очень определенное время суток, такое как полночь.

'Спящий' не должен быть перепутан с' , Ожидайте И Смотрите ' антишаблон.

, Что код будет заменен задолго до 2000 года - Многие разработчики в 1960

14
ответ дан 6 revs, 2 users 83% 23 November 2019 в 04:55
поделиться

Гигант

модульный тест А, который, хотя это законно тестирует объект под тестом, может охватить тысячи строк и содержать много много тестовых сценариев. Это может быть индикатором, что система под тестами Объект Бога (сообщение James Carr).

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

16
ответ дан 6 revs, 4 users 47% 23 November 2019 в 04:55
поделиться

я буду верить ему, когда я буду видеть некоторые высвечивающиеся графический интерфейсы пользователя
нездоровая фиксация/навязчивая идея с тестированием приложения через его GUI 'точно так же, как реальный пользователь'

, бизнес-правила Тестирования через GUI ужасны форма связи. Если Вы пишете тысячи тестов через GUI, и затем изменяете Ваш GUI, тысячи тестового повреждения.
Скорее протестируйте только вещи GUI через GUI и свяжите GUI с фиктивной системой вместо реальной системы, когда Вы запустите те тесты. Протестируйте бизнес-правила через API, который не включает GUI. - Bob Martin

“You должен понять, что наблюдение верит, но также и знайте, что вера видит. ” - Denis Waitley

15
ответ дан 2 revs, 2 users 97% 23 November 2019 в 04:55
поделиться

Инспектор
модульный тест А, который нарушает инкапсуляцию, чтобы достигнуть 100%-го покрытия кода, но знает так много о том, что продолжается в объекте, что любая попытка осуществить рефакторинг повредит существующий тест и потребует, чтобы любое изменение было отражено в модульном тесте.

<час>

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

34
ответ дан 2 revs 23 November 2019 в 04:55
поделиться

Ожидают и Видят

тест А, который выполняет некоторый установленный кодекс и затем должен 'ожидать' определенное количество времени, прежде чем это сможет 'видеть', функционировал ли код под тестом как ожидалось. testMethod, который использует Thread.sleep () или эквивалентный, несомненно, "Ожидайте и Смотрите" тест.

Как правило, можно видеть это, если тест тестирует код, который генерирует событие, внешнее к системе, такой как электронное письмо, запрос HTTP, или пишет файл в диск.

Такой тест может также быть Локальный Герой , так как он ПРИВЕДЕТ К СБОЮ, когда работается более медленное поле или перегруженный сервер CI.

Ожидание и Видит, что антишаблон не должен быть перепутан с Спящий .

19
ответ дан 5 revs, 3 users 78% 23 November 2019 в 04:55
поделиться

Мерцающий Тест (Источник: Romilly, Поднимающий)

тест А, который просто иногда перестал работать, не в определенные времена, и происходит вообще из-за условий состязания в тесте. Обычно происходит при тестировании чего-то, что является асинхронным, таким как JMS.

Возможно супер набор к' Ожидает и Видит ' антишаблон и' Спящий ' антишаблон.

сборка перестала работать, о, хорошо, просто выполните сборку снова. - Анонимный Разработчик

19
ответ дан 2 revsStuart 23 November 2019 в 04:55
поделиться

Бабочка

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

летучая мышь его крыла может вызвать ураган с другой стороны мира. - Edward Lorenz, Эффект бабочки

20
ответ дан 2 revs 23 November 2019 в 04:55
поделиться

Медленные Вводят по абсолютному адресу

модульный тест А, который работает невероятно медленный. Когда разработчики сбрасывают его с ноги, у них есть время, чтобы перейти к ванной, захватить дым, или хуже, сбросить тест с ноги, прежде чем они пойдут домой в конце дня. (Src: сообщение James Carr )

иначе тесты, которые не будут запускаться так часто, как они должны

25
ответ дан 3 revs, 3 users 46% 23 November 2019 в 04:55
поделиться

Анальный Датчик

тест А, который должен использовать безумные, недопустимые или в других отношениях нездоровые способы выполнить его задачу как: Чтение частных полей с помощью Java setAccessible (верный) или расширяя класс для доступа к защищенным полям/методам или имея необходимость поместить тест в определенный пакет для доступа к пакету глобальные поля/методы.

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

различие между этим и Инспектором - то, что класс под тестом пытается скрыть даже вещи, которые необходимо протестировать. Таким образом, Ваша цель не состоит в том, чтобы достигнуть 100%-го тестового покрытия, но быть в состоянии протестировать что-либо вообще. Думайте о классе, который имеет только частные поля, run() метод без аргументов и никаких методов get вообще. Нет никакого способа протестировать это, не нарушая правила.

<час>

Комментарий Michael Borgwardt: Это не действительно тестовый антишаблон, это - прагматизм для контакта с дефицитами в протестированном коде. Конечно, лучше зафиксировать те дефициты, но это не может быть возможно в случае сторонних библиотек.

Aaron Digulla: Я отчасти соглашаюсь. Возможно, эта запись действительно лучше подходит для "ПРАКТИЧЕСКОГО РУКОВОДСТВА JUnit" Wiki и не антишаблон. Комментарии?

32
ответ дан 7 revs, 4 users 79% 23 November 2019 в 04:55
поделиться

Тест Без Имени - Nick Pellow

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

Два года спустя, когда тот тест перестал работать, Вы, возможно, должны сначала попытаться найти, что ОШИБКА 123 в Вашем средстве отслеживания ошибки выясняет намерение теста.

26
ответ дан 5 revs, 4 users 60% 23 November 2019 в 04:55
поделиться

Чрезмерная Установка - James Carr
тест А, который требует огромной установки, чтобы даже начать тестировать. Иногда несколько сотен строк кода используются для подготовки среды к одному тесту с несколькими включенными объектами, который может мешать действительно устанавливать то, что тестируется из-за “noise” всего продолжения установки. (Src: сообщение James Carr )

34
ответ дан 6 revs, 4 users 62% 23 November 2019 в 04:55
поделиться

Неуместно Общее Приспособление - Tim Ottinger
Несколько тестовых сценариев в тестовом приспособлении даже не используют или нужны в установке / разрушение. Частично из-за инерции разработчика для создания нового тестового приспособления... легче просто добавить еще один тестовый сценарий к груде

17
ответ дан Gishu 23 November 2019 в 04:55
поделиться

Тихий Ловец - Kelly?
тест А, который передает, если исключение выдается.. даже если исключением, которое на самом деле происходит, является то, которое отличается, чем тот, разработчик предназначил.
См. Также: Секретный Ловец

[Test]
[ExpectedException(typeof(Exception))]
public void ItShouldThrowDivideByZeroException()
{
   // some code that throws another exception yet passes the test
}
40
ответ дан 3 revs, 2 users 83% 23 November 2019 в 04:55
поделиться

Осмеяние
Иногда насмешка может быть хорошей, и удобной. Но иногда разработчики могут потерять себя и в их усилии дразнить что протестированный isn’t. В этом случае модульный тест содержит столько насмешек, тупиков и/или фальшивок, что система под тестом isn’t даже протестированный вообще, вместо этого данные, возвращенные из насмешек, - то, что тестируется.

Источник: сообщение James Carr.

56
ответ дан 2 revs, 2 users 73% 23 November 2019 в 04:55
поделиться

Скованные цепью каторжники

Несколько тестов, которые должны работать в определенном порядке, т.е. одном тесте, изменяют глобальное состояние системы (глобальные переменные, данные в базе данных), и следующий тест (тесты) зависит от него.

Вы часто видите это в тестах базы данных. Вместо того, чтобы делать откат в teardown(), тесты передают свои изменения в базе данных. Другая частая причина состоит в том, что изменения в глобальном состоянии не обертываются в блоки попытки/наконец, какая уборка должна тестовый сбой.

58
ответ дан 4 revs, 2 users 90% 23 November 2019 в 04:55
поделиться

Локальный Герой

тестовый сценарий А, который зависит от чего-то характерного для среды разработки, которая это было записано на том, для выполнения. Результатом является тест, передает поля разработки, но перестал работать, когда кто-то пытается выполнить его в другое место.

Скрытая Зависимость

Тесно связанный с локальным героем, модульный тест, который требует, чтобы некоторые существующие данные были заполнены где-нибудь перед тестовыми прогонами. Если те данные wasn’t заполненный, тест приведет к сбою и оставит мало признака разработчику, что требовалось, или why†¦ то, чтобы вынуждать их вырыть через акры кода для обнаружения, где данные, которые это использовало, как предполагалось, прибыли из.

<час>

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

59
ответ дан 2 revs, 2 users 91% 23 November 2019 в 04:55
поделиться

Счастливый Путь

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

Антишаблоны JUnit

64
ответ дан 3 revs, 3 users 75% 23 November 2019 в 04:55
поделиться

Бесплатная Поездка / Автожелезнодорожные перевозки - James Carr, Tim Ottinger
, А не запись новый метод тестового сценария для тестирования другая/отличная функция/функциональность , новое утверждение (и его соответствующие действия т.е. Закон ступает с AAA), поездки вперед в существующем тесте.

67
ответ дан 4 revs, 3 users 38% 23 November 2019 в 04:55
поделиться

Мертвое дерево

Тест, в котором была создана заглушка, но тест на самом деле не был написан.

Я действительно видел это в нашем производственном коде:

class TD_SomeClass {
  public void testAdd() {
    assertEquals(1+1, 2);
  }
}

Я даже не знаю, что об этом думать.

11
ответ дан 23 November 2019 в 04:55
поделиться

Получил бит сегодня:

влажный пол :
Тест создает данные, которые где-то сохраняются, но тест не очищается при завершении. Это вызывает тесты (тот же тест, или, возможно, другие тесты), чтобы провалиться в последующих тестовых прогонов.

В нашем случае тест оставил файл, лежащий в «TEMP» DIR, с разрешениями от пользователя, который провел тест в первый раз. Когда другой пользователь пытался проверить на одной машине: бум. В комментариях на сайте Джеймса Карра Иоаким Омлрогге называют это как «небрежный работник», и он был частью вдохновения для «щедрых остатков». Мне нравится мое имя для этого лучше (менее оскорбительное, более знакомое).

11
ответ дан 23 November 2019 в 04:55
поделиться
Другие вопросы по тегам:

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