ASP.NET MVC单元使用NUnit进行测试

Joh*_*oge 7 asp.net-mvc nunit

我一直在尝试使用ASP.NET网站上发布的视频来学习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();
    }
Run Code Online (Sandbox Code Playgroud)

这在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
Run Code Online (Sandbox Code Playgroud)

我想问题是NUnit无法获取DataContext的连接字符串web.config.什么是最好的解决方法?

它在我运行页面时工作正常,但单元测试在NUnit中失败.

Ala*_*son 5

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


tva*_*son 3

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

如果您不想走模拟路线(我会推荐它,尽管这需要预先做一些工作)。您可以将 app.config 文件添加到单元测试项目中,并将数据上下文的连接字符串放入其中。