Я использую интерфейсы DAO, так что я могу реализовать как реальный DAO, так и тестовый DAO. Например, это интерфейс:
public interface PersonDAO {
public List<Person> findAll();
}
Тогда у меня будет 2 реализации этого интерфейса:
public class PersonHibernateDAO implements PersonDAO {
public List<Person> findAll() {
// use Hibernate to find and return all the Person objects
}
}
public class PersonTestDAO implements PersonDAO {
public List<Person> findAll() {
List<Person> testData = new ArrayList<Person>();
testData.add(new Person("Bob");
testData.add(new Person("Steve");
return testData;
}
}
Сам контроллер использует PersonDAO, и вы можете предоставить либо реализацию Hibernate (при работе или тестировании с базой данных), либо реализацию Test (при модульном тестировании или воспроизведении перед настройкой базы данных).