Ich habe zwei Tabellen, Clients und Administratoren, die in einer Viele-zu-Viele-Beziehung durch die Tabelle ClientAdministrators verbunden sind.LINQ to SQL: Gefälschtes Repository mit vielen-zu-vielen Beziehungen?
In der realen Anwendung funktioniert das gut und ich kann eine Liste der Administratoren für meinen Client erhalten. Mein Problem tritt auf, wenn versucht wird, die Serviceklasse, die diese aus dem Repository abruft, in einem Unit-Test zu testen.
Ich habe eine FakeRepository-Klasse, die meine Repository-Schnittstelle implementiert, und ich habe mehrere interne Listen von Objekten für die Dienstklasse abzufragen.
Mein Problem ist, dass ich keinen Weg finden kann, die Beziehungen in den falschen Klassen funktionieren zu lassen, um erfolgreich gegen diese Viele-zu-Viele-Beziehung abfragen zu können.
Dim clients = From c in _repository.GetAllClients _
Select New ClientBizObj With {.ID = c.ID, _
.ClientName = c.ClientName, _
.Admins = (From a in c.ClientAdministrators _
Select a.Administrator.UserName).ToList}
Es sagt mir, dass c.ClientAdministrators ein EntitySet ist (von ClientAdministrator).
Wie kann ich diese Beziehung in meiner FakeRepository-Klasse fälschen, so dass sie NullReferenceExceptions wirft?
Es ist mir egal, wenn keine Admins zurückgibt, ich brauche nur das Client-Objekt erfolgreich zurückgegeben werden.
Ich bin sicher, die Antwort liegt in dieser Richtung. Ich denke, was dies schwierig macht ist, dass GetAllClients() ein IQueryable statt IEnumerable zurückgibt und so die Sub-Abfrage erweist sich als schwer zu verspotten. Wenn Sie mir ein Beispiel dafür geben können, wäre ich sehr dankbar. – Nick
OK, klingt, als wären Sie nah dran.Wenn Ihr Mock einen IEnumerable erstellen kann und Sie LINQ referenzieren, können Sie Ihren enumerable.AsQueryable() oder AsQueryable() zurückgeben. –