2015-01-13 2 views
1

У меня есть два вопроса:Настройка всех издевается обнулить в метод Teardown & переменные на уровне класса в JUnit

1.) по методу Teardown из издевается. Люди говорят, что его обычная практика, чтобы установить все издевается в нуль в методе, как показано ниже демонтажа:

public void tearDown(){ 
    mockOne=null; 
    mockTwo=null; 
} 

Я хочу знать ли это действительно имеет смысл, или мы должны делать что-то полезное в Teardown? JVM не позаботится о том, чтобы свести на нет издевательства?

  1. ) Кроме того, должны ли быть определены все переменные, которые используются в jUnit, на уровне класса или уровне метода? Я знаю, что создание на уровне класса способствует повторному использованию кода, но не будет ли оно незанято занимать память все время при сохранении состояния?

Спасибо.

ответ

0

1.

Я не думаю, что ваш tearDown делает всю массу полезных вещей. Ваши тестовые примеры обычно выполняются на другом VM с производственного сервера VM s, поэтому нет необходимости быть настолько осторожным в отношении GC (если это намерение установить макеты на null). Ошибочные объекты среди заглушек, создаваемые вашими тестовыми классами, будут иметь право на GC, как только они выйдут из сферы действия, что в худшем случае, после выполнения всех тестовых случаев и выхода из JVM.

Конечно, это может помочь garbage-collector вернуть эти ресурсы раньше, чем без него, но если вы не используете действительно большой набор модульных тестов, это не может быть проблемой.

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

Не переусердствуйте с этими fixtures - имейте что-то для установки для последующих тестовых примеров? Сделайте это в методе @Before аннотированный setUp. Есть что-то вроде очистки ресурсов, таких как соединения с базой данных и системные ресурсы? Сделайте это в After аннотированный метод tearDown.

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

2.

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

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

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

1

К вашему первому моменту, я бы сказал, что я лично редко когда-либо использовал метод tearDown(), конечно, чтобы не потерять ссылку на макет. Я не склонен верить «людям» в этом.

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

Как обычно, держите его простым и стремиться к минимальной настройке (Упорядочить), вызову испытуемого объекта (Акт) и проверки (Assert) в каждом тесте. Если у вас есть проблемы с этим, это признак того, что ваш испытуемый объект (или испытуемый класс) может делать слишком много.

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