Ich nehme an, dass mit "Repository" meinst du eine DAO; Wenn nicht, dann gilt diese Antwort nicht.
In letzter Zeit habe ich "im Speicher" "Mock" (oder Test) Implementierungen meiner DAO, die im Grunde arbeiten von Daten (eine Liste, Karte, etc.) in den Konstruktor des Mocks gemacht. Auf diese Weise kann die Komponententestklasse beliebige Daten, die sie für den Test benötigt, einwerfen, ändern usw., ohne dass alle Komponententests, die auf dem DAO "im Speicher" arbeiten, so codiert werden müssen, dass sie die gleichen Testdaten verwenden. Ein Plus, das ich in diesem Ansatz sehe, ist, dass ich, wenn ich ein Dutzend Komponententests habe, die das gleiche DAO für ihren Test verwenden müssen (um zum Beispiel in die getestete Klasse zu injizieren), muss ich nicht Erinnern Sie sich jedes Mal an alle Details der Testdaten (wie wenn der "Schein" fest codiert wäre) - der Komponententest erstellt die Testdaten selbst. Auf der anderen Seite bedeutet dies, dass jeder Komponententest ein paar Zeilen für die Erstellung und Verkabelung seiner Testdaten ausgeben muss. aber das ist ein kleiner Nachteil für mich.
Ein Codebeispiel:
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;
}
}
Ich meine das Repository-Muster. Ich habe die Frage mit einem Link zu Martin Fowlers Definition bearbeitet. –