2014-09-10 4 views
1

я был тест начального блока, используя фальшивый классПередразнивало хранилище не получает заселенно

var dbContext = new FakeMyDbContext 
     { 
      Users = { new IdentityUser { 
           Id="94ccfbae-8567-405e-8e2e-70a038cdde40" } 
      }, 
     }; 

var repository = new MyRepository<IdentityUser>(dbContext); 

Когда я запускаю его я имею 1 пользователь в хранилище, хорошо. Однако я хотел использовать Moq, поэтому я пробовал это

var user = new Mock<IdentityUser>(); 
user.Setup(x => x.Id).Returns("94ccfbae-8567-405e-8e2e-70a038cdde40"); 

var users = new Mock<IDbSet<IdentityUser>>(); 
users.Setup(x => x.Add(user.Object)); 

var dbContext = new Mock<MyDbContext<IdentityUser>>(); 
dbContext.Setup(x => x.Users).Returns(users.Object); 

var repository = new MyRepository<IdentityUser>(dbContext.Object); 

Но в этом случае хранилище пуста. Что мне не хватает? Благодарю.

Update

Незначительные изменения, чтобы получить ответ принят на работу. DbSet не является непосредственно доступной создана в FakeDbSet

public class FakeDbSet<T> : IDbSet<T> where T : class 

И использовали

var user = new IdentityUser { Id = "94ccfbae-8567-405e-8e2e-70a038cdde40" }; 
IDbSet<IdentityUser> users = new FakeDbSet<IdentityUser> { user }; 

ответ

1

Я думаю, что пользователи-насмешка не обеспечивает пользователей. Вы издеваетесь над методом Add() IDbSet<IdentityUser>, но на самом деле ничего не добавляет, так что пользователей нет. Вам необходимо настроить другой метод, который предоставляет пользователям или не высмеивать пользователей, например:

IDbSet<IdentityUser> users = new DbSet<IdentityUser> 
{ 
    new IdentityUser { Id = "94ccfbae-8567-405e-8e2e-70a038cdde40" } 
}; 

var dbContext = new Mock<MyDbContext<IdentityUser>>(); 
dbContext.Setup(x => x.Users).Returns(() => users); 

var repository = new MyRepository<IdentityUser>(dbContext.Object); 
Смежные вопросы