Я предполагаю, что под "хранилищем" вы подразумеваете DAO ; если нет, то этот ответ не будет применяться.
В последнее время я делаю "в памяти" "макетные" (или тестовые) реализации моего DAO, которые в основном работают с данными (списком, картой и т. Д.), Переданными в конструктор макета. Таким образом, класс модульных тестов может свободно добавлять любые данные, необходимые для теста, может изменять их и т. Д., Не заставляя все модульные тесты, работающие на DAO «в памяти», кодироваться для использования одних и тех же тестовых данных.
Один плюс, который я вижу в этом подходе, состоит в том, что если у меня есть дюжина модульных тестов, которым нужно использовать один и тот же DAO для своего теста (например, для внедрения в тестируемый класс), мне не нужно запоминать все детали тестовых данных каждый раз (как если бы «макет» был жестко закодирован) - модульный тест создает сами тестовые данные. С другой стороны, это означает, что каждый модульный тест должен тратить несколько строк, создавая и связывая свои тестовые данные; но это маленький недостаток для меня.
Пример кода:
public interface UserDao {
User getUser(int userid);
User getUser(String login);
}
public class InMemoryUserDao implements UserDao {
private List users;
public InMemoryUserDao(List users) {
this.users = users;
}
public User getUser(int userid) {
for (Iterator it = users.iterator(); it.hasNext();) {
User user = (User) it.next();
if (userid == user.getId()) {
return user;
}
}
return null;
}
public User getUser(String login) {
for (Iterator it = users.iterator(); it.hasNext();) {
User user = (User) it.next();
if (login.equals(user.getLogin())) {
return user;
}
}
return null;
}
}