2015-07-28 12 views
8

Jestem jednostką testującą opakowanie do sterownika MongoDB C#. Mam ten wiersz kodu:W jaki sposób Moq IFindFluent, aby to połączenie do ToListAsync działa?

Collection.Find(predicate).ToListAsync(); 

Gdzie Collection jest typu IMongoCollection<T> i Find(predicate) zwraca instancję wdrożenia IFindFluent<T, T>. ToListAsync() jest rozszerzeniem, aby zamienić wyniki na listę, jak zakładam.

Próbuję napisać testy jednostkowe i nie mogę się z tym pogodzić. Nie mogę utworzyć klasy otoki, ponieważ właśnie nad tym pracuję. Wolałbym uczynić to tak, aby ToListAsync() zwrócił utworzoną listę LUB wyśmiewał się z Find(), aby zwrócić coś, co może stanowić listę.

Odpowiedz

2

Po zrobieniu małej warstwy abstrakcji, ponieważ nie mogłem znaleźć niczego odpowiedniego i prośba o pomoc nie przyniosła odpowiedzi.

Utworzono parę interfejsów/implementacji o nazwie AppCollection specjalnie do obsługi interfejsu MongoDB. IAppCollection ma metodę dla IAppCollection.ToList(predicate), a AppCollection uruchomi wywołanie Collection.Find(predicate).ToListAsync();, zwracając listę. Później było to banalną sprawą, która kpiła z IAppCollection, aby mieć pewność, że wykonywane są właściwe połączenia. Chociaż nie mogłem przetestować predykatów w natywnym LINQ, mogłem przynajmniej skompilować predykaty i porównać je z przechodzącymi/niedziałającymi obiektami.

+0

Walczę też z szyderstwem IFindFluent i natknąłem się na twój post. Czy byłbyś w stanie dostarczyć mi swoją implementację interfejsu IAppCollection, aby dać więcej światła na twoje rozwiązanie? Z góry dziękuję za pomoc – slanto