Набор тестов Junit 4 и человек тестируют классы

У меня есть набор тестов JUnit 4 с методами BeforeClass и AfterClass, которые делают установку/разрушение для следующих тестовых классов. То, в чем я нуждаюсь, должно выполнить тестовые классы также ими сам, но для этого мне нужен сценарий установки/разрушения (BeforeClass и AfterClass или что-то как этот) для каждого тестового класса. Вещь состоит в том, что, когда я выполняю комплект, я не хочу выполнять установку/разрушение прежде и после каждого тестового класса, я только хочу выполнить установку/разрушение от набора тестов (однажды). Действительно ли это возможно?Заранее спасибо.

6
задан Péter Török 22 February 2010 в 10:47
поделиться

3 ответа

Я не знаю никакого стандартного способа сделать это с помощью JUnit. Причина этого, как вы, вероятно, уже знаете, заключается в том, что ваши тестовые примеры должны выполняться независимо друг от друга. Это касается "обычных" методов setup/teardown, которые выполняются до и после каждого метода тестирования. Установка и удаление классов - это немного другое, хотя я бы все же предпочел запускать свои тесты независимо и держаться подальше от проблемной зоны.

Однако, если вы действительно уверены в том, что делаете, вы могли бы использовать глобальный флаг, сигнализирующий о том, нужно ли запускать установку/разрушение класса, и проверять его состояние в методах установки/разрушения класса. В свой набор тестов вы можете включить специальный класс в качестве самого первого, который не делает ничего, кроме выполнения установки и установки глобального флага, чтобы указать реальным тестовым примерам, что их методы class setup/teardown не должны выполняться. Аналогично, специальный последний класс в наборе может выполнять код разрушения. Оговорка заключается в том, что, боюсь, JUnit не гарантирует порядок выполнения тестовых классов внутри набора, хотя, скорее всего, он выполняет их в указанном порядке - но это лишь деталь реализации. Попробуйте, это может сработать для вас - но нет никакой гарантии, что это всегда будет делать то, что вы ожидаете.

4
ответ дан 17 December 2019 в 00:08
поделиться

Если у вас jUnit 4.7+, я рекомендую изучить новую возможность под названием Rules (о которой рассказывается в этой записи блога). Возможно, это не совсем то, что вам нужно, но, вероятно, это лучшее, что вы можете получить с jUnit.

Предположительно, TestNG имеет лучшие возможности группировки тестов, но я сам еще не изучал этот вопрос.

3
ответ дан 17 December 2019 в 00:08
поделиться

Если у вас есть jUnit 4.7 +, я рекомендую изучить новую функцию под названием Правила (которая объясняется в этой записи в блоге ). Они могут быть не совсем такими, какими вы хотите, но они, вероятно, лучшее, что вы получаете с jUnit.

Предположительно, Test NG имеет лучшие возможности для группирования тестов, но я еще не изучил это сам.

-121--4378517-

Имеет то же самое событие ошибки. Это работает для меня (по крайней мере, в хроме):

<input type="image" onerror="alert(1);" src="http://xxx" />

Другой возможный способ - загрузить изображение в JS:

при загрузке документа:

$('input[type="image"]').each(function(){
    var img = new Image();
    var input = this;
    img.onerror = function() { Image_OnError(input); }
    img.src = this.src;
})

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

-121--3747403-

Нет, в JUnit нет стандартного способа сделать это, хотя вы могли бы взломать что-то, как предложил Петер Тёрёк.

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

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

0
ответ дан 17 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

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