Вот 3 веские причины, почему. В итоге:
В некоторых ситуациях предпочитается отложить настройку тестовых приборов как можно дольше, до непосредственно перед выполнением тестового примера.
Некоторые тестовые наборы могут быть частью глубокой иерархии наследования тестовых наборов. Может быть предпочтительнее отложить настройку тестовых устройств до полной иерархии конструкторов.
Вы получаете лучшую диагностику, если в setUp () происходит сбой кода установки, а не в конструкторе.
1. Отложите настройку приборов до самого теста
Дизайн для удобства использования
http://www.artima.com/weblogs/viewpost.jsp?thread=70189
... И, как выразился Эллиот Расти Гарольд, если вы собираетесь создавать новый экземпляр TestCase для каждого метода тестирования, "зачем, черт возьми, беспокоиться о методе setUp ()?" Вы можно просто использовать конструктор TestCase.
Я слышал, что Брюс Экель заметил, что есть одно тонкое отличие между созданием вашего прибора в setUp () и созданием его в конструкторе TestCase. JUnit создает все экземпляры TestCase заранее , а затем для каждого экземпляра вызывает setup (), метод test и tearDown () . Другими словами, небольшая разница в том, что все конструкторы вызываются в пакетном режиме, тогда как метод setUp () вызывается непосредственно перед каждым методом теста . Но это, похоже, не столь полезная разница на практике.
2. Отложите настройку приборов до тех пор, пока не будут созданы все контрольные примеры
Экстремальное программирование на Java в ETutorial - 4.6 Настройка и устранение
http://etutorials.org/Programming/Java+extreme+programming/Chapter+4.+JUnit/4.6+Set+Up+and+Tear+Down/
Вам может быть интересно, почему вы должны написать метод setUp () вместо простой инициализации полей в конструкторе тестового примера . В конце концов, поскольку новый экземпляр тестового примера создается для каждого из его методов тестирования, конструктор всегда вызывается перед setUp (). В подавляющем большинстве случаев вы можете использовать конструктор вместо setUp () без каких-либо побочных эффектов.
В тех случаях, когда ваш контрольный пример является частью более глубокой иерархии наследования, вы можете отложить инициализацию объекта до полного создания экземпляров производных классов [test] . Это хорошая техническая причина, почему вы можете использовать setUp () вместо конструктора для инициализации. Использование setUp () и tearDown () также полезно для документирования, просто потому, что это может облегчить чтение кода .
3. Лучшая диагностика в случае сбоя настройки
Лучшие практики JUnit (JavaWorld)
http://www.javaworld.com/jw-12-2000/jw-1221-junit.html
Настройка тестового примера в конструкторе не очень хорошая идея. ...
Представьте себе [в коде, где настройка выполняется в конструкторе тестовых случаев], что при выполнении установки код установки выдает исключение IllegalStateException. В ответ JUnit сгенерирует ошибку AssertionFailedError, что указывает на невозможность создания контрольного примера. ...
Эта трассировка стека [исключения, сгенерированного в коде установки в конструкторе тестовых случаев], оказывается довольно неинформативной; это только указывает на то, что контрольный пример не может быть создан.
Вместо настройки данных в конструкторе, выполнить настройку теста путем переопределения setUp (). Любое исключение, выданное в setUp (), сообщается правильно. ...
Эта трассировка стека [исключения, созданного в методе setUp () вместо конструктора тестовых случаев), гораздо более информативна; он показывает, какое исключение было сгенерировано (IllegalStateException) и откуда. Это значительно облегчает объяснение сбоя тестовой установки.