Extensions for mocking Entity Framework Core async queries like ToListAsync, FirstOrDefaultAsync, and more using popular mocking libraries such as Moq, NSubstitute, and FakeItEasy β all without hitting the database.
β€οΈ If you really like the tool, please π Support the project or β Buy me a coffee.
| Package | Downloads | Latest Version | Install via Package Manager | 
|---|---|---|---|
| MockQueryable.Core | Install-Package MockQueryable.Core |  ||
| MockQueryable.EntityFrameworkCore | Install-Package MockQueryable.EntityFrameworkCore |  ||
| MockQueryable.Moq | Install-Package MockQueryable.Moq |  ||
| MockQueryable.NSubstitute | Install-Package MockQueryable.NSubstitute |  ||
| MockQueryable.FakeItEasy | Install-Package MockQueryable.FakeItEasy |  
Avoid hitting the real database in unit tests when querying via IQueryable:
var query = _userRepository.GetQueryable(); await query.AnyAsync(x => ...); await query.FirstOrDefaultAsync(x => ...); await query.ToListAsync(); // etc.var users = new List<UserEntity> { new UserEntity { LastName = "Smith", DateOfBirth = new DateTime(2012, 1, 20) }, // More test data... };var mock = users.BuildMock(); // for IQueryable_userRepository.Setup(x => x.GetQueryable()).Returns(mock);_userRepository.GetQueryable().Returns(mock);A.CallTo(() => userRepository.GetQueryable()).Returns(mock);var mockDbSet = users.BuildMockDbSet(); // Moq var repo = new TestDbSetRepository(mockDbSet.Object); // NSubstitute / FakeItEasy var repo = new TestDbSetRepository(mockDbSet);mock.Setup(x => x.FindAsync(userId)).ReturnsAsync((object[] ids) => { var id = (Guid)ids[0]; return users.FirstOrDefault(x => x.Id == id); });Build a mock with the custom SampleLikeExpressionVisitor for testing EF.Functions.Like
var mockDbSet = users.BuildMockDbSet<UserEntity, SampleLikeExpressionVisitor>();You can even create your own extensions. Check the example here.
See the sample project for working examples.