Лучшие практики JUnit на основе JPA

Они обычно используются в качестве подробной формы обратного вызова.

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

Вот пример качания

myButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
        // do stuff here...
    }
});

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

30
задан matt b 10 August 2009 в 12:56
поделиться

3 ответа

Вы можете попробовать mockito . Тест работает следующим образом:

Вы используете mockito для «реализации» EntityManager . Вместо реального кода вы используете методы mockito, чтобы сказать: «если приложение вызывает getReference () , то вернуть этот объект». В фоновом режиме mockito создаст экземпляр прокси, который перехватывает вызовы метода Java и возвращает указанные вами значения. Вызов других методов вернет null .

Мокирующие вещи вроде createQuery () работают точно так же, но сначала вам нужно создать макет Query и затем используйте тот же подход, что и в getReference () (верните макет запроса).

Поскольку вы не используете настоящий EM, вы не Мне нужен настоящий persistence.xml .

Намного более простым решением было бы, если бы вы могли установить какое-то свойство для изменения имени файла persistence.xml , но я не Не думаю, что это возможно.

Некоторые другие ссылки, которые могут помочь:

16
ответ дан 28 November 2019 в 00:24
поделиться

Лучше всего использовать Spring и модульное тестирование Spring. С Spring вам не требуются два файла persistence.xml, поскольку в вашем persistence.xml ничего нет, все указывается в spring (все, что мы указываем в нашем persistence.xml, - это имя единицы сохранения), и, таким образом, вы можете изменить конфигурацию базы данных и т. д. с помощью spring.

И, как заметил topchef, модульное тестирование на основе транзакций Spring - это великолепно.

4
ответ дан 28 November 2019 в 00:24
поделиться

Мы используем двойные файлы persistence.xml для производственной и тестовой среды выполнения, но это только проблема, связанная с путями к классам (мы используем Eclipse, но не сильно полагаемся на плагины WTP). Единственная разница между ними заключается в том, что производственная версия не содержит определений сущностей.

Мы не используем фреймворк для тестирования JPA, поскольку это не добавит ценности нашим тестам. Тесты действительно запускают доступ к данным с помощью JPA, который взаимодействует с базой данных PostgreSQL.

Наш подход к тестам основан на тестовой среде Spring для уровня сохраняемости: тестирование в транзакции. Наше приложение основано на Spring, но этот подход одинаково применим для произвольных приложений, которые хотят использовать преимущества тестовых классов Spring. Суть в том, что каждый тест выполняется в рамках одной транзакции, которая никогда не фиксируется, и в конце (в tearDown) она автоматически откатывается. Это решает проблему загрязнения данных и тестовой зависимости очень приятным ненавязчивым и прозрачным способом.

Тестовая среда Spring гибкая, позволяя тестировать несколько транзакций, но это особые случаи, которые составляют не более 10% тестов.

] Мы по-прежнему используем унаследованную поддержку JUnit 3.8 , но новая Spring TestContext Framework для JUnit 4 выглядит очень привлекательно.

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

5
ответ дан 28 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

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