EF4.1 Code First Mocking with Moq

时间:2011-05-19 07:37:08

标签: unit-testing moq ef-code-first entity-framework-4.1

我正在尝试使用EF4.1 Code Frist进行EF操作。我开发了我的模型,如:

public class User
{
    [Key]
    public int Id{get;set;}
    [Column("first_name")]
    [StringLength(30)]
    public string FristName{get;set;}
    //............
    //..............
}

我也写了一个界面:

public interface IUser
{
    IDbSet<User> Users{get;}
}

我的上下文类看起来像这样:

public class UserContext : DbContext, IUser
{
    public DbSet<User> Users{get;set;}

    IDbSet<User> IUser.Users{get return{Users;}}
}  

现在我不知道如何使用Moq来模拟这个存储库并进行单元测试。也许我是嘲笑单元测试的新手。

请告诉我或者给我一些资源,我可以学习如何使用Moq和EF4.1。

1 个答案:

答案 0 :(得分:2)

模拟数据访问时使用的一个很好的模式是Repository pattern and Unit of work。当您对Repository接口进行抽象数据访问时,可以使用像moq这样的模拟框架。为您提供可测试的存储库。

var mockUnitOfWork = new Mock<IUnitOfWork>();
mockUnitOfWork.SetupGet(p => p.UserRepository.GetSomeUsers)
.Returns(new List<User> { "Username", "email","etc"}));  

然后,您可以使用mockUnitOfWork和存储库来测试数据访问,而不必将数据库作为唯一访问内存用户列表的数据库。