DAO с шаблонами spring JDBC: лучший способ модульного тестирования

#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: это не обязательно должна быть встроенная база данных. В нашем проекте у каждого есть локальная база данных, поэтому интеграционные тесты могут выполняться против нее. Это достижимо для вас?