Всегда помните, что идея модульных тестов (с использованием насмешек) состоит в том, чтобы тыкать и подталкивать все темные углы одного класса.Они предназначены для того, чтобы убедиться, что класс ведет себя так, как ожидалось, для всех видов ввода, которые вы можете придумать.Вот почему мы используем mocks для этого, потому что мы можем запрограммировать эти mocks для выполнения всевозможных вещей, которые могут быть трудно воспроизвести, если класс был подключен к остальной части приложения.
Интеграция с другимрука, имеет другой акцент.Речь идет о том, чтобы все ваши классы работали вместе для достижения желаемого результата.Так что имейте это в виду, когда кодируете их.Это большая картина, которую вы ищете.Вам не нужно беспокоиться о крайних случаях отдельных классов, потому что это работа ваших проверенных модульных тестов.Но такие вещи, как состояние базы данных, именно поэтому важны интеграционные тесты.
Я также согласен с @stivlo относительно использования таких продуктов, как HSQL, для работы с базой данных памяти.Они могут как ускорить интеграционное тестирование, так и помочь обеспечить известную отправную точку для теста.
Я бы посоветовал хранить ваши юнит-тесты и интеграционные тесты в отдельных каталогах или, по крайней мере, в отдельных пакетах, названных для соответствия.Просто, потому что это поможет вам вспомнить, с чем вы имеете дело.
Также следите за тестом ползучести.То есть.Модульные тесты, которые создают множество классов приложений и действительно должны быть перенесены в интеграционные тесты, и интеграционные тесты, которые выполняют множество подробных тестов стиля вариаций для класса - кандидатов в модульные тесты.В частности, с последним вы можете сократить время сборки, если существуют интеграционные тесты, которых не должно быть.
Наконец, как и любой код, тестовый код время от времени требует немного любви и внимания.Так что следите за возможностями рефакторинга.Тем не менее, я также видел тестовый код, с которым стало трудно работать, потому что он слишком обобщенный и слишком сложный.Помните, что тестовый код не является рабочим кодом, поэтому в большинстве случаев ясность гораздо важнее, чем проектирование.Это баланс, который вы получите благодаря опыту.