在实体框架中,如何在不实际连接到数据库的情况下对dbmodel构造进行单元测试?

时间:2014-10-09 18:20:03

标签: entity-framework unit-testing ef-model-builder

我有一个继承自DbContext的类,它实现了代码优先的Entity Framework对象。

我想在这个dbcontext中进行一个单元测试来运行模型构建器 - 这对于检测诸如未在实体上定义的键这样的东西很有用。错误。

但是在单元测试期间我可能没有可用的实际数据库。有没有办法在不实际尝试与上下文建立数据库连接的情况下运用此代码。我尝试了一些无害的东西,如:

var ctx = new MyDbContext("Data Source=(local);Initial Catalog=Dummy;<.......>");
var foo = ctx.GetValidationErrors();  //triggers DBModelBuilder, should throw if my DBModel is goofed up

这在技术上有效。但是这需要很长时间才能运行 - 如果我暂停并检查调用堆栈,则会触发对System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin的调用

最终超时,吞下连接错误并完成测试。

没有连接尝试,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

这里的解决方案就是解决问题并使用尽可能低的连接超时。我正在使用此连接字符串:

服务器=本地主机;数据库tempdb的=; Integrated Security = true;连接超时= 1; ConnectRetryCount = 0

它仍会触发问题,但是一秒超时并且没有自动重试(对于系统中的这一个测试),这是完全可以接受的。

如果开发人员安装了本地数据库,它将意外地工作得更快。