If you need to Mock Entity Framework in your Unit Tests you may end up referring to this article: https://msdn.microsoft.com/en-us/library/dn314429.aspx
In the article, they require you to create a test collection of your DbSet objects which are subsequently passed to your DbContext instance.
In addition, if you have multiple DbSet objects which are involved in a particular query, then this increases your workload even further!
However, you can use a framework such as NBuilder which is available as a NuGet package in order to simplify some of this code for you:
Alternatively, you can use some NuGet packages which takes away some of the extra setup for Mocking Entity Framework such as the following:
https://github.com/RichardSilveira/EntityFramework.MoqHelper
https://github.com/scott-xu/EntityFramework.Testing
In the article, they require you to create a test collection of your DbSet objects which are subsequently passed to your DbContext instance.
In addition, if you have multiple DbSet objects which are involved in a particular query, then this increases your workload even further!
However, you can use a framework such as NBuilder which is available as a NuGet package in order to simplify some of this code for you:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var mockSet1 = new Mock<DbSet<Table1>>(); | |
var mockSet2 = new Mock<DbSet<Table2>>(); | |
var mockSet3 = new Mock<DbSet<Table3>>(); | |
var mockSet4 = new Mock<DbSet<Table4>>(); | |
var mockContext = new Mock<MyDbContext>(ConnectionString); | |
var table1List = Builder<Table1> | |
.CreateListOfSize(ListSize) | |
.Build().AsQueryable(); | |
var table2List = Builder<Table2> | |
.CreateListOfSize(ListSize) | |
.Build().AsQueryable(); | |
var table3List = Builder<Table3> | |
.CreateListOfSize(ListSize) | |
.Build().AsQueryable(); | |
var table4List = Builder<Table4> | |
.CreateListOfSize(ListSize) | |
.Build().AsQueryable(); | |
mockSet1.As<IQueryable<Table1>>().Setup(m => m.Provider).Returns(table1List.Provider); | |
mockSet1.As<IQueryable<Table1>>().Setup(m => m.Expression).Returns(table1List.Expression); | |
mockSet1.As<IQueryable<Table1>>().Setup(m => m.ElementType).Returns(table1List.ElementType); | |
mockSet1.As<IQueryable<Table1>>().Setup(m => m.GetEnumerator()).Returns(table1List.GetEnumerator()); | |
mockSet2.As<IQueryable<Table2>>().Setup(m => m.Provider).Returns(table2List.Provider); | |
mockSet2.As<IQueryable<Table2>>().Setup(m => m.Expression).Returns(table2List.Expression); | |
mockSet2.As<IQueryable<Table2>>().Setup(m => m.ElementType).Returns(table2List.ElementType); | |
mockSet2.As<IQueryable<Table2>>().Setup(m => m.GetEnumerator()).Returns(table2List.GetEnumerator()); | |
mockSet3.As<IQueryable<Table3>>().Setup(m => m.Provider).Returns(table3List.Provider); | |
mockSet3.As<IQueryable<Table3>>().Setup(m => m.Expression).Returns(table3List.Expression); | |
mockSet3.As<IQueryable<Table3>>().Setup(m => m.ElementType).Returns(table3List.ElementType); | |
mockSet3.As<IQueryable<Table3>>().Setup(m => m.GetEnumerator()).Returns(table3List.GetEnumerator()); | |
mockSet4.As<IQueryable<Table4>>().Setup(m => m.Provider).Returns(table4List.Provider); | |
mockSet4.As<IQueryable<Table4>>().Setup(m => m.Expression).Returns(table4List.Expression); | |
mockSet4.As<IQueryable<Table4>>().Setup(m => m.ElementType).Returns(table4List.ElementType); | |
mockSet4.As<IQueryable<Table4>>().Setup(m => m.GetEnumerator()).Returns(table4List.GetEnumerator()); | |
mockContext.Setup(m => m.Table1).Returns(mockSet1.Object); | |
mockContext.Setup(m => m.Table2).Returns(mockSet2.Object); | |
mockContext.Setup(m => m.Table3).Returns(mockSet3.Object); | |
mockContext.Setup(m => m.Table4).Returns(mockSet4.Object); |
https://github.com/RichardSilveira/EntityFramework.MoqHelper
https://github.com/scott-xu/EntityFramework.Testing
No comments:
Post a Comment