Moq extension to transform a list to Moq of DBSet for testing the Entity Framework DbSet.
public static class Extensions
{
public static Mock<DbSet<T>> GetMockSet<T>(this IQueryable<T> data) where T : class
{
var mockSet = new Mock<DbSet<T>>();
mockSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(data.Provider);
mockSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(data.Expression);
mockSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(data.ElementType);
mockSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns<T>(x => data.GetEnumerator());
return mockSet;
}
}
To use it in the test as following:
[TestMethod]
public void GetCustomer_Mocked_With_Extension()
{
var mockedContext = new Mock<IDbContext>();
var data = new List<Customer>
{
new Customer { FirstName = "Rahman", LastName = "Mahmoodi", Id = 1 }
}.AsQueryable();
var mockSet = data.GetMockSet<Customer>(); // This is how to use it
mockedContext.Setup(x => x.Customers).Returns(mockSet.Object);
var cbo = new CustomerBusinessObject(mockedContext.Object);
var c = cbo.Get(1);
Assert.IsTrue(c.FirstName == "Rahman");
}
No comments:
Post a Comment