Se moquant EF DbContext Moq

Je suis en train de créer un test unitaire pour mon service avec un moqué DbContext. J'ai créé une interface IDbContext avec les fonctions suivantes:

public interface IDbContext : IDisposable
{
    IDbSet<T> Set<T>() where T : class;
    DbEntityEntry<T> Entry<T>(T entity) where T : class;
    int SaveChanges();
}

Mon contexte réel implémente cette interface IDbContext et DbContext.

Maintenant, je suis en train d'essayer de se moquer de l' IDbSet<T> dans le contexte, elle retourne un List<User> à la place.

[TestMethod]
public void TestGetAllUsers()
{
    //Arrange
    var mock = new Mock<IDbContext>();
    mock.Setup(x => x.Set<User>())
        .Returns(new List<User>
        {
            new User { ID = 1 }
        });

    UserService userService = new UserService(mock.Object);

    //Act
    var allUsers = userService.GetAllUsers();

    //Assert
    Assert.AreEqual(1, allUsers.Count());
}

J'ai toujours cette erreur sur .Returns:

The best overloaded method match for
'Moq.Language.IReturns<AuthAPI.Repositories.IDbContext,System.Data.Entity.IDbSet<AuthAPI.Models.Entities.User>>.Returns(System.Func<System.Data.Entity.IDbSet<AuthAPI.Models.Entities.User>>)'
has some invalid arguments
  • Bien que ce post vous sera utile , je pense qu'il serait plus si vous avez inclus la mise en œuvre de la Moq DbContext , merci pour l'idée .
InformationsquelleAutor Gaui | 2014-09-21