簡體   English   中英

ASP.NET MVC單元使用NUnit進行測試

[英]ASP.NET MVC unit tests with 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();
    }

這在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中失敗。

web.config項目中的連接字符串復制到nunit測試項目中的app.config

我采取的策略是模擬數據上下文。 我使用工廠創建數據上下文並將其注入控制器。 如果工廠為null(調用無參數構造函數時會發生這種情況),它將創建連接到數據庫的工廠的默認實例。 在我的單元測試中,我使用一個工廠來創建一個在內存中工作的虛假數據上下文。 我將我的模擬數據上下文基於此博客的代碼,盡管我已將其擴展為處理通過實體集添加到數據庫的對象。

如果你不想去模擬路線(我會推薦它,雖然它需要預先做一些工作)。 您可以將app.config文件添加到單元測試項目中,並將數據上下文的連接字符串放入其中。

最好不要從單元測試中訪問數據庫,因為這會導致測試運行得如此之慢,以至於您不必再費心去運行測試了。 但是,如果您確實想這樣做,可以在NUnit項目中創建一個app.config文件,並將連接字符串放在那里。 有時NUnit無法識別此app.config文件,但有關如何配置它的更多詳細信息可以在“ 如何在NUnit中初始化ConnectionStrings集合 ”的答案中找到。

最簡單的方法是在安裝ASP.NET MVC之前安裝NUnit,然后在創建ASP.NET MVC項目時設置測試項目。 然后,您可以創建執行所嘗試操作所需的配置元素。

注意:處理數據的更好方法是模擬它,這意味着您需要將LINQ移出控制器,因為您無法輕易地反轉控制器上的控制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM