【发布时间】:2020-05-04 19:19:24
【问题描述】:
我正在使用:MSTest、Entity Framework 6 和 Moq
我正在尝试使用我们预先存在的实体框架 asp.net 应用程序来学习 TDD。现在我正在使用我们的 web api,我创建了一个新的测试项目和类,我正在尝试编写一个测试,看看我是否可以至少获得一个值。所以在某些地方,我显然不得不为已经存在的代码编写测试。
这里我不知道是否/如何设置我的测试项目、类或方法(不确定哪些需要设置)以测试此方法
[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") {}
...
}
我在这里有什么选择?有没有办法让 Moq 来处理这个问题,还是我需要以某种方式更新测试项目?我不想(此时)做的是返工,这将使我不得不更改应用程序的其他核心部分。
【问题讨论】:
-
你不能在你的单元测试项目的
app.config文件中定义连接字符串吗? -
您的应用程序似乎缺少一点依赖注入,因此很难通过适当的单元测试来覆盖它。
-
另外我想说你不需要将你的
_out变量移动到外部范围。只需在您的usingblock ad movereturn语句中使用ToList实现查询。
标签: c# entity-framework-6 asp.net-web-api2 moq mstest