我使用假类进行了初始单元测试
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 };
答案 0 :(得分:1)
我认为users-mock不提供任何用户。你模拟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);