此刻我正在自食其力。就像实体框架不可测试。我已经阅读了很多使用工作单元或最小起订量或回购模式的帖子和线程。
我正处于一个无法改变很多应用程序架构的阶段。该应用程序此时可以完全正常工作,但要确保我需要具有高代码覆盖率,因此需要对其进行测试。
对于测试,我使用的是“假上下文”方法,我可以使用假的进行模拟,使用真的连接到数据库。
我以此为例。 http://romiller.com/2010/09/07/ef-ctp4-tips-tricks-testing-with-fake-dbcontext/
在那里,您可以看到上下文被拆分并用作接口。喜欢:
public interface IEmployeeContext
{
IDbSet Department Departments { get; }
IDbSet Employee Employees { get; }
int SaveChanges();
}
public class EmployeeContext : DbContext, IEmployeeContext
{
public IDbSet Department Departments { get; set; }
public IDbSet Employee Employees { get; set; }
}
public class FakeEmployeeContext : IEmployeeContext
{
public FakeEmployeeContext()
{
this.Departments = new FakeDepartmentSet();
this.Employees = new FakeEmployeeSet();
}
public IDbSet Department Departments { get; private set; }
public IDbSet Employee Employees { get; private set; }
public int SaveChanges()
{
return 0;
}
}
}
所以测试,一切正常。我似乎唯一不能做的事情是测试一个带有 .State 的控制器,我在其中检查它是否已更改,例如:EntityState.Modified
因为这使用了一个接口,所以我需要将它添加到接口上下文中。并创建一个新的。还是我错过了什么?在那种情况下创建整个方法可能不是我的意图。我怎样才能让它发挥作用