Ich habe eine Adapterklasse für Linq-to-Sql:
public interface IAdapter : IDisposable
{
Table<Data.User> Activities { get; }
}
Data.User ist ein von Linq-to-Sql definiertes Objekt, das auf die Tabelle User in der Persistenz verweist.
Die Umsetzung sieht folgendermaßen aus:
public class Adapter : IAdapter
{
private readonly SecretDataContext _context = new SecretDataContext();
public void Dispose()
{
_context.Dispose();
}
public Table<Data.User> Users
{
get { return _context.Users; }
}
}
Dies macht das Mocking der Persistenzschicht in Unit-Tests einfach, da ich einfach eine beliebige Sammlung von Daten für Benutzer zurückgeben kann (Rhino.Mocks):
Expect.Call(_adapter.Users).Return(users);
Das Problem ist, dass ich das Objekt "users" nicht erstellen kann, da die Konstruktoren nicht zugänglich sind und die Klasse Table versiegelt ist. Eine Möglichkeit, die ich ausprobiert habe, ist, IAdapter einfach IEnumerable oder IQueryable zurückgeben zu lassen, aber das Problem dabei ist, dass ich dann keinen Zugriff auf die Methoden habe, die ITable bietet (z. B. InsertOnSubmit()). Gibt es eine Möglichkeit, wie ich die gefälschte Tabelle im Unit-Test-Szenario erstellen kann, so dass ich ein glücklicher TDD-Entwickler sein kann?