如何使用 Moq 测试创建新 DbContext 的方法?
How can I use Moq to test a method that creates a new DbContext?
我正在使用:MSTest
、Entity Framework 6
和 Moq
我正在尝试使用我们现有的 entity framework asp.net 应用程序学习 TDD。现在我正在我们的网站 api 中工作,我创建了一个新的测试项目,并且 class 我正在尝试编写一个测试,看看我是否至少可以得到一个值。所以在某些地方,我显然必须为已经存在的代码编写测试。
这里我想不出if/how来设置我的测试项目,class,或者方法(不确定哪个需要设置)来测试这个方法
[HttpGet]
[ResponseType(typeof(IEnumerable<TimeZoneDTO>))]
[Route("api/timezone")]
public IHttpActionResult GetTimeZones()
{
var _out = new IEnumerable<TimeZoneDTO>();
using (var db = new Entities())
{
_out = from x in db.Timezones
orderby x.UTCOffSet descending
select new TimeZoneDTO() {
Caption = x.Name,
Id = x.Abbreviation
};
}
return Ok(_out);
}
问题是 using (var db = new Entities())
依赖于控制器项目的 web.config 文件中的命名数据库配置字符串。
public partial class Entities : DbContext
{
public Entities(): base("name=Entities") {}
...
}
我在这里有哪些选择?有没有办法让起订量来处理这个问题,或者我是否需要以某种方式更新测试项目?我(此时)不想做的是返工,这将使我不得不更改应用程序的其他核心部分。
处理这种情况的典型方法是更改您正在测试的 class,以便它注入 DbContext 本身或生成 DbContext 的工厂。这样,它就不会 new
自己建立 DbContext,而是依赖依赖注入配置来确定 DbContext 的创建方式。然后你可以(使用模拟或假工厂,如果你走工厂路线)。
我正在使用:MSTest
、Entity Framework 6
和 Moq
我正在尝试使用我们现有的 entity framework asp.net 应用程序学习 TDD。现在我正在我们的网站 api 中工作,我创建了一个新的测试项目,并且 class 我正在尝试编写一个测试,看看我是否至少可以得到一个值。所以在某些地方,我显然必须为已经存在的代码编写测试。
这里我想不出if/how来设置我的测试项目,class,或者方法(不确定哪个需要设置)来测试这个方法
[HttpGet]
[ResponseType(typeof(IEnumerable<TimeZoneDTO>))]
[Route("api/timezone")]
public IHttpActionResult GetTimeZones()
{
var _out = new IEnumerable<TimeZoneDTO>();
using (var db = new Entities())
{
_out = from x in db.Timezones
orderby x.UTCOffSet descending
select new TimeZoneDTO() {
Caption = x.Name,
Id = x.Abbreviation
};
}
return Ok(_out);
}
问题是 using (var db = new Entities())
依赖于控制器项目的 web.config 文件中的命名数据库配置字符串。
public partial class Entities : DbContext
{
public Entities(): base("name=Entities") {}
...
}
我在这里有哪些选择?有没有办法让起订量来处理这个问题,或者我是否需要以某种方式更新测试项目?我(此时)不想做的是返工,这将使我不得不更改应用程序的其他核心部分。
处理这种情况的典型方法是更改您正在测试的 class,以便它注入 DbContext 本身或生成 DbContext 的工厂。这样,它就不会 new
自己建立 DbContext,而是依赖依赖注入配置来确定 DbContext 的创建方式。然后你可以