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.