我有一个项目基于EF Code First
使用MSSQL server
。在我的一个知识库中,我使用PredicateBuilder
动态构建查询。每次在代码中发生变化时手动测试所有可能的结果非常耗时。如何对数据库访问逻辑进行单元测试?
因此,我想通过单元测试来实现自动化。我正考虑使用sql compact
进行单元测试,并使用MSSQL server
进行生产。但是,如何启用sql compact
服务器的迁移?
这是的DbContext类:
public partial class ApplicationDbContext :
IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public ApplicationDbContext() : base("name=DefaultConnection") { }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());
base.OnModelCreating(modelBuilder);
}
}
库:
public class FilterRepository : IFilterRepository
{
private ApplicationDbContext _dbContext;
public FilterRepository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
DbInterception.Add(new CommandInterceptor());
}
public IEnumerable<Person> GetPersons(Filter filter)
{
try
{
var persons = PredicateBuilder.False<Person>();
_dbContext.Configuration.AutoDetectChangesEnabled = false;
var result = _dbContext.Persons
.AsNoTracking()
.Where(persons)
.OrderBy(x => x.Name)
.Skip(filter.Skip)
.Take(10)
.ToList();
_dbContext.Configuration.AutoDetectChangesEnabled = true;
return result;
}
catch (Exception ex)
{
}
}
}
请参阅http://stackoverflow.com/questions/9907905/entity-framework-code-first-how-to-seed-a-database-for-unit-testing。简而言之 - 创建一个初始化程序,它将删除并重新创建紧凑型数据库,然后对其进行播种。在单元测试开始时初始化上下文,并且每次运行测试时都会重新创建它。但是,如果你想打一个数据库,这比单元测试更像是一个集成测试。 – 2015-02-11 22:52:46