I am unit testing a wrapper to the MongoDB C# driver. I have this line of code:
Collection.Find(predicate).ToListAsync();
Where Collection
is of type IMongoCollection<T>
and Find(predicate)
returns an instance implementing IFindFluent<T, T>
. ToListAsync()
is an extension to turn the results into a list, I assume.
I am attempting to write unit tests, and I am stumped on handling this. I can't make a wrapper class because that's what I'm working on. I would prefer to either make it so ToListAsync()
returns a created list OR to mock the Find()
to return something that can be made a list of.
I wound up making a little abstraction layer for this, since I couldn't find anything suitable and asking for help yielded no answers.
I created an interface/implementation pair called AppCollection
specifically to handle the MongoDB interface. IAppCollection
would have a method for IAppCollection.ToList(predicate)
, and the AppCollection
would run the Collection.Find(predicate).ToListAsync();
call, returning the list. Later, it was a trivial matter to mock the IAppCollection
to make sure the right calls were being made. While I couldn't test the predicates in native LINQ, I could at least compile the predicates and compare them to passing/failing objects.