Какой самый лучший метод очистки памяти в PHP? (5.2)

У меня два простых вопроса. Что лучше / полезно для очистки памяти.

$var = null;

или

unset($var);

У меня есть одна функция с одним циклом. Есть два аналогичных метода: 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 {
}
155
задан Pops 28 August 2012 в 16:55
поделиться

4 ответа

Аннотированные методы @BeforeClass и @AfterClass будут выполняться ровно один раз во время вашего тестового прогона - в самом начале и в конце теста в целом, прежде чем что-либо еще будет бегать. Фактически, они запускаются до того, как будет создан тестовый класс, поэтому они должны быть объявлены статическими .

Методы @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()
197
ответ дан 23 November 2019 в 21:57
поделиться

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

Наконец, используйте аннотированный метод «AfterClass», чтобы очистить любую настройку, которую вы сделали в аннотированном методе «BeforeClass» (если их самоуничтожение недостаточно).

«До» и «После» предназначены для инициализации, специфичной для модульного теста. Обычно я использую эти методы для инициализации / повторной инициализации имитаторов моих зависимостей. Очевидно, что эта инициализация не является специфической для модульного теста, а является общей для всех модульных тестов.

15
ответ дан 23 November 2019 в 21:57
поделиться

Из документа Javadoc :

Иногда для нескольких тестов требуется совместно использовать дорогостоящую в вычислительном отношении настройку (например, вход в базу данных). Хотя это может поставить под угрозу независимость тестов, иногда это необходимая оптимизация. Аннотирование общедоступного статического метода void no-arg с помощью @BeforeClass приводит к его однократному запуску перед любым из тестовых методов в классе. Методы @BeforeClass суперклассов будут выполняться раньше, чем методы текущего класса.

5
ответ дан 23 November 2019 в 21:57
поделиться

setUpBeforeClass выполняется перед выполнением любого метода сразу после конструктора (выполняется только один раз)

setUp выполняется перед каждым выполнением метода

tearDown выполняется после каждого выполнения метода

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

7
ответ дан 23 November 2019 в 21:57
поделиться
Другие вопросы по тегам:

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