Moq.EntityFrameworkCore 9.0.0.5

Moq.EntityFrameworkCore

Build Status Downloads

This library helps you mocking EntityFramework contexts. Now you will be able to test methods that are using DbSet<TEntity> or DbQuery<TEntity> from DbContext in an effective way.

Installation - NuGet Packages

Install-Package Moq.EntityFrameworkCore

Usage

For example we can assume that we have the following production code:

public class UsersContext : DbContext
{
    public virtual DbSet<User> Users { get; set; }
}

To mock Users and Roles you only need to implement the following 3 steps:

1. Create DbContext mock:

var userContextMock = new Mock<UsersContext>();

2. Generate your entities:

IList<User> users = ...;

3. Setup DbSet or DbQuery property:

userContextMock.Setup(x => x.Users).ReturnsDbSet(users);

or

userContextMock.SetupGet(x => x.Users).ReturnsDbSet(users);

or

userContextMock.SetupSequence(x => x.Set<User>())
  .ReturnsDbSet(new List<User>())
  .ReturnsDbSet(users);

And this is all. You can use your DbContext in your tests.

The second option is mocking DbSet that is part of the interface:

public interface IBlogContext
{
   DbSet<Post> Posts { get; }
}

And then use:

var posts = new List<Post>();
var contextMock = new Mock<IBlogContext>();
contextMock.Setup(p => p.Posts).ReturnsDbSet(posts);

Using ReturnsDbSetWithGlobalFilter

You can also use ReturnsDbSetWithGlobalFilter to set up a DbSet with a global filter. For example:

var users = new List<User> { new User { IsActive = true }, new User { IsActive = false } };
var userContextMock = new Mock<UsersContext>();
userContextMock.Setup(x => x.Users).ReturnsDbSetWithGlobalFilter(users, u => u.IsActive);

New Usage Option: ReturnsDbSetDynamic

You can now use the ReturnsDbSetDynamic method for scenarios where you need lazy evaluation of your DbSet. This ensures that the DbSet is re-evaluated dynamically at runtime.

userContextMock.Setup(x => x.Users).ReturnsDbSetDynamic(users);

Explanation of Differences

  • ReturnsDbSet: Statically resolves the DbSet value during setup.
  • ReturnsDbSetDynamic: Dynamically resolves the DbSet value using a lambda, ensuring it reflects changes at runtime.

You will find examples of this library in the repository.

No packages depend on Moq.EntityFrameworkCore.

Version 8.0.0.1 Added support for EntityFrameworkCore 8.0

.NET 8.0

Version Downloads Last updated
9.0.0.5 1 6/29/2025
9.0.0.1 1 2/28/2025
8.0.1.7 1 2/28/2025
8.0.1.6 1 2/28/2025
8.0.1.2 1 2/28/2025
8.0.1.1 1 2/28/2025
8.0.0.1 1 2/28/2025
7.0.0.2 5 8/6/2023
6.0.1.4 1 2/28/2025
6.0.1.3 1 2/28/2025
6.0.1.2 1 2/28/2025
6.0.0.6 1 2/28/2025
5.0.0.2 2 2/28/2025
5.0.0.1 2 2/28/2025
3.1.2.13 2 2/28/2025
3.1.2.6 1 2/28/2025
3.1.2.1 1 2/28/2025
3.0.0.10 2 2/28/2025
3.0.0.4 2 2/28/2025
2.2.1.1 1 2/28/2025
2.2.1 1 3/5/2025
2.0.1 2 3/5/2025
1.0.0 2 3/5/2025