Разница между setUp() и setUpBeforeClass()
при модульном тестировании с JUnit существует два аналогичных метода,setUp() и setUpBeforeClass(). В чем разница между этими методами? Кроме того, в чем разница между tearDown() и tearDownAfterClass()?
вот подписи:
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
4 ответов:
The
@BeforeClassи@AfterClassаннотированные методы будут запускаться ровно один раз во время тестового запуска - в самом начале и в конце теста в целом, прежде чем что-либо еще будет запущено. Фактически, они запускаются до того, как тестовый класс будет даже построен, поэтому они должны быть объявленыstatic.The
@Beforeи@Afterметоды будут выполняться до и после каждого тестового случая, поэтому, вероятно, будет выполняться несколько раз во время тестового запуска.предположим, у вас было три тесты в вашем классе, порядок вызовов методов будет:
setUpBeforeClass() (Test class first instance constructed and the following methods called on it) setUp() test1() tearDown() (Test class second instance constructed and the following methods called on it) setUp() test2() tearDown() (Test class third instance constructed and the following methods called on it) setUp() test3() tearDown() tearDownAfterClass()
подумайте о "BeforeClass" как о статическом инициализаторе для вашего тестового случая - используйте его для инициализации статических данных - вещей, которые не меняются в ваших тестовых случаях. Вы определенно хотите быть осторожными в отношении статических ресурсов, которые не являются потокобезопасными.
наконец, используйте аннотированный метод " AfterClass "для очистки любой настройки, которую вы сделали в аннотированном методе" BeforeClass " (если их самоуничтожение не достаточно хорошо).
"перед" & "После" для специфического модульного теста инициализация. Я обычно использую эти методы для инициализации / повторной инициализации насмешек моих зависимостей. Очевидно, что эта инициализация не является специфичной для модульного теста, но общей для всех модульных тестов.
setUpBeforeClass запускается перед выполнением любого метода сразу после конструктора (выполняется только один раз)
настройка выполняется перед каждым выполнением метода
демонтаж выполняется после выполнения каждого метода
tearDownAfterClass запускается после выполнения всех других методов, является последним методом, который будет выполнен. (запустить только один раз деконструктор)
С Javadoc:
иногда несколько тестов должны совместно использовать вычислительно дорогую настройку (например, вход в базу данных). Хотя это может поставить под угрозу независимость тестов, иногда это вынужденная оптимизация. Аннотирования
public static voidметод no-arg с@BeforeClassвызывает его запуск один раз перед любым из методов тестирования в классе. Элемент@BeforeClassметоды суперклассов будут запускаться перед тем, как текущий класс.
Comments