Supongo que por "repositorio" te refieres a DAO; si no, esta respuesta no se aplicará.
Últimamente he estado realizando implementaciones "en memoria" "simuladas" (o de prueba) de mi DAO, que básicamente operan sin datos (una Lista, Mapa, etc.) pasados al constructor de la simulación. De esta manera, la clase de prueba de la unidad puede arrojar cualquier dato que necesite para la prueba, puede cambiarlo, etc., sin forzar que todas las pruebas de la unidad que operan en el DAO "en memoria" se codifiquen para usar los mismos datos de prueba.
Una ventaja que veo en este enfoque es que si tengo una docena de pruebas unitarias que necesitan usar el mismo DAO para su prueba (para inyectar en la clase bajo prueba, por ejemplo), no necesito recuerde todos los detalles de los datos de prueba cada vez (como lo haría si el "simulacro" estuviera codificado) - la prueba unitaria crea los datos de prueba en sí. En el lado negativo, esto significa que cada prueba unitaria tiene que gastar unas pocas líneas creando y conectando sus datos de prueba; pero eso es un pequeño inconveniente para mí.
un ejemplo de código:
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;
}
}
Me refiero al patrón de repositorio. He editado la pregunta con un enlace a la definición de Martin Fowler. –