2013-04-01 3 views
1

Я разрабатываю несколько тестовых примеров для своего приложения. Предположим, что у меня есть метод, называемыйИспытаны ли тесты производительности в области JUnit?

ProcessedDataObject createProcessedDataObject(RawDataHolder input)

Производительность createProcessedDataObject имеет жизненно важное значение, так что я хотел бы включить некоторые тесты тестирование производительности постоянных входов (например, строительство input из локального текстового файла, так что не меняется) и терпят неудачу, если для каждой будущей модификации метода требуется больше определенного количества наносов. IOW, я хочу, чтобы тест был разработан, чтобы поднять красный флаг в случае, если будущие изменения добавят сложности, чтобы превысить отметку времени.

Мой вопрос: тестирует ли тестирование производительности в области JUnit или должен ли я хранить его снаружи?

+1

Я бы сказал, что это вопрос мнения. Более насущная проблема: вне зависимости от структуры, можете ли вы настроить среду, которая позволит обеспечить надежные и значимые тесты регрессии производительности? –

+0

Итак, не могли бы вы сказать, что если бы защита такой стабильной среды песочницы была слишком большой движущейся мишенью, это бы недействило бы такой тест как единичный тест? – amphibient

+1

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

ответ

2

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

1

Я предлагаю вам разделить свои тестовые примеры на функциональные модульные тесты и нефункциональные интеграционные тесты. Если вы используете Maven, вы можете использовать Surefire + Failsafe, чтобы достичь этого. Вы все равно можете написать свои тесты производительности как тесты JUnit, но таким образом вы логически отделите их, чтобы функции и тестирование производительности были разделены.

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

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

например. Если мой тестовый предел составляет 100 нанометров, и он занимает 101 нм, недостаточно ли недопустимо, чтобы сбой сборки? Должен ли я запускать один и тот же тест 10 раз и принимать среднее значение? Должен ли я запускать один и тот же тест 10 раз и каждый раз проверять его ниже порога? Сколько проверок следует делать? Все эти (и многое другое) являются соображениями, которые вы должны делать.

+0

как мне разделить их на разные категории? см. мой новый пост, он касается именно этого: http://stackoverflow.com/questions/15755389/running-benchmark-methods-in-a-junit-test-class – amphibient

Смежные вопросы