[英]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.