#unit-testing
#модульное тестирование
Вопрос:
Каков наилучший способ модульного / интеграционного тестирования классов DAO layer, созданных с использованием шаблонов Spring JDBC?
На ум приходят три подхода:
1) Макет библиотеки (EasyMock, JMock, Mockito и т. Д.) — Тестовый код Spring framework использует этот подход — они используют EasyMock.
2) Встроенная база данных (H2, HSQL, Derby)
3) Реальная база данных — тот же продукт, который используется в производстве, Sybase ASE в моем случае — очевидно, другая схема.
Cons:
1)This may slow down unit test execution.
2)Schema is shared between different developers / CI server. So, need to make sure there is no concurrency issue.
Некоторые люди утверждают, что первый и второй подходы не являются реальным тестированием. Дополнительная проблема со вторым подходом заключается в том, что база данных, которую я использую, Sybase ASE, похоже, не совместима ни с одним из них.
Хотелось бы узнать лучшие практики.
Спасибо.
Ответ №1:
- Если вы не выполняете # 1, вы на самом деле не проводите модульное тестирование.
- Наши DAO в целом очень тонкие и не нуждаются в модульном тестировании, но мы тщательно тестируем их на интеграцию и делаем это со встроенной базой данных (H2).
- # 3 не кажется хорошей идеей. Насколько я понимаю, вы говорите об использовании единой «реальной базы данных», которая используется совместно между тестами. Это может вызвать у вас много головной боли и очень недостижимо! Тесты должны выполняться изолированно!
Комментарии:
1. С вариантом 2 (с использованием встроенной базы данных) — как можно работать с базой данных Sybase ASE? В H2 нет режима совместимости с Sybase.
2. @tapasvi: это не обязательно должна быть встроенная база данных. В нашем проекте у каждого есть локальная база данных, поэтому интеграционные тесты могут выполняться против нее. Это достижимо для вас?