Wednesday, April 24, 2013

Unit testing the EF DataContext using Moq and FakeDbSet

I came across a very sweet way of testing EF DataContexts: . This guy figured it out.

What he does is:
- Change all DbSet<...> in your EF DataContext to IDbSet<...>
- Extract an interface
- Get NuGet package Moq :
- Get NuGet package FakeDbSet :

Setup a test datacontext with some data like so:

// Create mock unit of work
var mockDataContext = new Mock<IDataContext>();
var mockItemList= new InMemoryDbSet<item>(clearDownExistingData: true)
new item(FakeDepartureDate1, "drp1", "drp3", 1), 
new item(FakeDepartureDate1, "drp1", "drp3", 2), 
new item(FakeDepartureDate1, "drp1", "drp3", 2), 
new item(FakeDepartureDate2, "drp2", "drp3", 4), 
new item(FakeDepartureDate2, "drp2", "drp4", 5), 
new item(FakeDepartureDate2, "drp2", "drp4", 5)
mockDataContext.Setup(m => m.itemList).Returns(mockItemList);

And presto - you can start testing against your fake data. I used it to prove my query worked correctly.

EntityFramework testing will be done like so from now on by me!

But - don't take my word for it - check out the guy who figured it out before me:

1 comment:

  1. Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging. If anyone wants to become a .Net developer learn from .Net Training in Chennai. or learn thru ASP.NET Essential Training Online