Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用NUnit的ASP.NET MVC单元测试_Asp.net Mvc_Nunit - Fatal编程技术网

Asp.net mvc 使用NUnit的ASP.NET MVC单元测试

Asp.net mvc 使用NUnit的ASP.NET MVC单元测试,asp.net-mvc,nunit,Asp.net Mvc,Nunit,我一直在尝试使用上发布的视频学习,但在进行单元测试时遇到了问题 我有一个非常简单的控制器,用于获取对象数组: public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; using (TrainingLogDataContext dc = new TrainingLogDataContext()) { ViewD

我一直在尝试使用上发布的视频学习,但在进行单元测试时遇到了问题

我有一个非常简单的控制器,用于获取对象数组:

    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";
        using (TrainingLogDataContext dc = new TrainingLogDataContext())
        {
            ViewData.Model = dc.Workouts.ToArray();
        }

        return View();
    }
此操作失败,出现以下错误:

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中单元测试失败。

我采取的策略是模拟数据上下文。我使用工厂创建数据上下文并将其注入控制器。如果工厂为null(调用无参数构造函数时会发生这种情况),它将创建连接到数据库的工厂的默认实例。在我的单元测试中,我使用一个工厂来创建一个在内存中工作的假数据上下文。我将模拟数据上下文建立在源代码的基础上,不过我已经对其进行了扩展,以处理通过实体集添加到数据库中的对象


如果您不想走模拟路线(我建议您这样做,不过这需要一些前期工作)。您可以将app.config文件添加到单元测试项目中,并将数据上下文的连接字符串放入其中。

此模板和说明帮助我将其安装并运行:

最简单的方法是在安装ASP.NET MVC之前安装NUnit,然后在创建ASP.NET MVC项目时设置测试项目。然后,您可以创建执行尝试操作所需的配置元素


注意:处理数据的更好方法是模拟数据,这意味着您需要将LINQ移出控制器,因为您无法轻松反转控制器上的控制。

web.config项目中的连接字符串复制到nunit测试项目中的app.config

最好不要从单元测试中访问数据库,因为这将导致测试运行速度太慢,以至于您不再费心运行测试。但是如果您确实想这样做,您可以在NUnit项目中创建app.config文件,并将连接字符串放在那里。有时NUnit无法识别此app.config文件,但有关如何配置该文件的更多详细信息,请参见“”的答案