Na blogu pojawiły się ostatnio dwa wpisy pokazujące w jaki sposób mnożna zamockować DbSet<TEntity> wykorzystując Moq:

Opisane rozwiązania połączyłem w jednej bibliotece i opublikowałem jako pakiet NuGet – Moq.EntityFramework.Helpers.

Pakiet ten ułatwia mockowanie DbContext z EnitityFrameworka. Dzięki niemu testowanie metod wykorzystujących DbSet<TEntity>  będzie prostsze oraz efektywniejsze.

Przed użyciem pakietu należy go najpierw zainstalować:

Install-Package Moq.EntityFramework.Helpers

A następnie wykonać następujące 3 kroki:

  1. Utworzyć mocka DbContext:
var userContextMock = new Mock<UsersContext>();
  1. Przygotować elementy, które mają zostać zwrócone:
IList<User> users = ...;
  1. Zasetupować właściwość DbSet:
userContextMock.Setup(x => x.Users).Returns(users);

I tyle wystarczy. Można już zacząć przeprowadzać testy na elementach wykorzystujących DbContext.

Kod i więcej przykładów można znaleźć na moim GitHubie.

I jeszcze drobnostka. Kod dziedziczący po DbContext wygląda następująco:

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