2013-05-21 3 views
0

У нас есть несколько тестовых примеров, которые загружают данные в кеш и запускают тестовый пример. Тесты выполняются нормально, но когда мы запускали все тестовые примеры, когда он занимает много времени, поскольку кеш загружается каждый раз для каждого тестового примера. Есть ли способ загрузить кеш один раз, а затем использовать кеш во всех тестовых случаях.Кэш повторного использования во всех тестовых примерах junit

Один из способов сделать это - положить все тестовые примеры в один класс, но он побеждает цель, так как результат будет непросто проанализировать (в каждом классе есть около 5-10 методов тестирования и около 30 тестовых классов поэтому создаваемый отчет будет очень большим и не организованным). Я пробовал использовать набор тестов, но кеш становится отключенным после каждого теста, поскольку он запускает их один за другим.

+0

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

+0

ya он может загрязнять ... но мы также запускаем тестовые примеры индивидуально ... окончательный запуск, который запускает все тестовые примеры, будет непосредственно перед развертыванием в тестовом env, который гарантирует, что все работает нормально – AutoMEta

+0

Можно ли клонировать/копировать ваш кеш? Возможно, тогда вы можете создать кеш один раз и скопировать его для каждого теста. –

ответ

0

Я бы подумал, что @BeforeClass удовлетворит ваши потребности.

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

Вы можете использовать это в суперкласс и последующие sublasses могут упростить вашей организации кода/тестирования.

+1

"* Один из способов сделать это - поставить все тестовые примеры в один класс, но он не соответствует цели, так как результат будет трудно проанализировать *« <- не уверен, что это будет работать для OP. –

+0

Да. Я не совсем понимаю приведенное выше утверждение, и я не уверен, как анализ относится к структуре кода. –

+0

Я использую перед классом для загрузки кеша ... но это имеет место для каждого тестового примера, поэтому его выполнение тоже самое...мы можем добавить beforeclass в набор тестов, тогда мы можем загружать кеш только один раз – AutoMEta

6

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

Альтернативное решение - реализовать свой собственный тестовый бегун, который будет управлять кешем. Затем вы должны пометить все тестовые примеры, которым нужен кеш, используя аннотацию @RunWith и пройти там класс тестового бегуна.

+0

. Ваш ответ лучше моего, +1 для предложения абстрактного родительского класса. –

+0

, который выглядит хорошо. Не могли бы вы объяснить, как я могу использовать @RunWith или если вы можете ссылаться на пример. – AutoMEta

+0

статический член делает трюк .. спасибо – AutoMEta

1

Создайте тестовый комплект, который содержит метод @BeforeClass, который инициализирует кэш, а затем добавляет все ваши тестовые примеры. Это также позволяет легко добавлять дополнительные классы тестов. Не забудьте поставить их в правильном порядке, если это имеет значение. Сначала выполняется верхний костюм.

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
TestClass1.class, 
TestClass2.class 
)} 
public class TestSuiteClass { 
    @BeforeClass 
    public void initCache() { 
     //Your init code here. 
    } 
} 

Некоторые полезные ссылки: http://junit.sourceforge.net/javadoc/org/junit/runner/RunWith.html http://junit.org/javadoc/4.9/org/junit/runners/Suite.SuiteClasses.html

Чуть более комплексный пример: http://www.tutorialspoint.com/junit/junit_suite_test.htm

+0

да попробует это .. спасибо – AutoMEta

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