Модульное тестирование гибернации даос с пружиной - PullRequest
8 голосов
/ 15 сентября 2011

Мне нравится писать JUnits для моих реализаций hibernate dao и искать мнения о предлагаемом подходе к написанию этих тестовых случаев.Я могу подумать о двух стратегиях.

  • Моделирование спящего шаблона с использованием библиотеки, подобной EasyMock, и тестирование только реализации DAO на предмет этих фиктивных объектов.(Не очень удовлетворительно, так как я буду тестировать на фиктивном слое, а не на тестовых данных)данные перед запуском моего модульного теста.

Какой подход является хорошим способом обеспечения надлежащего тестирования наших DAO.Пожалуйста, укажите мне на примеры настройки тестов с использованием второго подхода.Я попытался осмотреться, но не нашел подходящих.

Спасибо, Шива.

Ответы [ 2 ]

5 голосов
/ 15 сентября 2011

Я бы пошел вторым путем, используя HSQLDB в качестве механизма БД.Я думаю, что вызов реальной реализации за DAO имеет положительный эффект от обнаружения ошибок отображения.

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

3 голосов
/ 15 сентября 2011

Тест по реальной базе данных.Большая часть сложности Hibernate заключается в отображении, и если вы издеваетесь над SessionFactory (или что его инкапсулирует), вы пропускаете его полностью.Используйте Spring Test Framework , чтобы значительно упростить ваше тестирование, а для локальных «модульных» тестов - тестирование по базе данных в памяти.H2 прост в использовании и очень быстр (лучше, чем HSQLDB или Derby).Например:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("your test context.xml")
public class FooDaoTest {
    @Autowired
    private FooDao dao;

    @Transactional
    public void saveFoo_succeeds() {
        // test save
    }

    @Transactional
    public void saveAndLoadFoo_resultsInSameFieldValues() {
        // save and load; compare fields from before to after
    }

    // test custom queries
}
...