我一直在尝试使用ASP.NET website上发布的视频来学习ASP.NET MVC,但我在进行单元测试时遇到了问题。
我有一个非常简单的控制器,它使用LINQ to SQL来获取对象数组:
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
using (TrainingLogDataContext dc = new TrainingLogDataContext())
{
ViewData.Model = dc.Workouts.ToArray();
}
return View();
}
在NUnit中此操作失败,并显示以下错误:
at TrainingLog.Models.TrainingLogDataContext..ctor() in C:\Webs\TrainingLog\TrainingLog\Models\TrainingLog.designer.cs:line 41
at TrainingLog.Controllers.HomeController.Index() in C:\Webs\TrainingLog\TrainingLog\Controllers\HomeController.cs:line 16
at TrainingLogTests.Controllers.HomeControllerTest.Index() in C:\Webs\TrainingLog\TrainingLog.Tests\Controllers\HomeControllerTest.cs:line 23
我猜问题在于NUnit无法从web.config
获取DataContext的连接字符串。解决这个问题的最好方法是什么?
当我运行页面时,它工作得很好,但是单元测试在NUnit中失败了。
发布于 2009-04-27 11:01:13
将web.config项目中的连接字符串复制到nunit测试项目中的app.config。
发布于 2009-04-25 10:37:15
我采取的策略是模拟数据上下文。我使用工厂来创建数据上下文并将其注入控制器。如果工厂为空(这是调用无参数构造函数时发生的情况),它将创建连接到数据库的工厂的默认实例。在我的单元测试中,我使用了一个工厂,它创建了一个在内存中工作的假数据上下文。我的模拟数据上下文基于来自this blog的代码,尽管我对其进行了扩展以处理通过实体集添加到数据库中的对象。
如果你不想走模拟路线(我会推荐它,尽管这需要一些前期的工作)。您可以将app.config文件添加到单元测试项目中,并将数据上下文的连接字符串放入其中。
发布于 2009-04-25 10:54:20
https://stackoverflow.com/questions/789450
复制