2014-09-10 67 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); 

但是在這種情況下版本庫是空的。我錯過了什麼?謝謝。

更新

一個小的改動,以獲得接受的答案工作。 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

我認爲,用戶,模擬不提供用戶。您模擬IDbSet<IdentityUser>的Add()方法,但它實際上不會添加任何內容,因此沒有用戶。你需要設置一些其他的方法,提供給用戶或者根本不嘲笑用戶,例如:

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);