运行单元测试时出现以下错误(自创建数据库以来,支持'MyContext'上下文的模型已更改)
在我的上下文构造函数中,我设置了
Database.SetInitializer<MyContext>(null);
在我的单元测试中,我正在嘲笑上下文。我还将此代码添加到单元测试中,但仍然失败。除了Database.SetInitializer<MyContext>(null);
我的上下文在这里
public class MyContext : DbContext
{
public MyContext () : base("MyContext")
{
Database.SetInitializer<MyContext>(null);
}
public virtual DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().ToTable("Users");
}
}
单元测试中的模拟
var _context = new Mock<MyContext>();
Database.SetInitializer<MyContext>(null);
_classUnderTest = new Repo(_context.Object);
我在这里收到错误
_context.Entry(user).State = EntityState.Added;
答案 0 :(得分:1)
我不确定我是否理解了这个问题但是如果您使用的是Entity framework Code First方法,则在更改模型后,请尝试在应用程序中启用迁移。可以使用包管理器控制台来完成..
有关详细信息,请参阅此链接。MSDN link
答案 1 :(得分:0)
如果没有提供连接字符串,那么引擎盖下的EF将默认连接到sql express。所以解决这个问题的方法不是模拟上下文,而是从上下文中提取一个接口并模拟它。事实证明,MSDN上的示例非常差,因为它们模拟的是实际的上下文而不是抽象。
https://msdn.microsoft.com/en-us/library/dn314429.aspx?f=255&MSPPError=-2147217396