我一直在尝试使用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中失败.
我正在使用具有图像上传功能的MVC网站,我想编写一个将上传图像的测试.
我创建了一个名为TestImage.jpg的图像,并将Copy to Output设置为"Copy if Newer".在我的测试中,我尝试使用以下代码加载它:
System.Drawing.Image testImage = System.Drawing.Image.FromFile(@"TestImage.jpg");
Run Code Online (Sandbox Code Playgroud)
"复制到输出"不应该将其复制到运行测试的同一目录中吗?如果没有,我怎样才能找到它被复制到的位置?最好的是某种项目根相对路径,所以我可以随意移动解决方案而不会破坏.
我有一个简单的地址输入应用程序,我正在尝试使用IDataErrorInfo接口,如asp.net网站上所述.
它适用于可以独立验证的项目,但是当某些项目依赖于其他项目时效果不佳.例如,验证邮政编码取决于国家/地区:
private string _PostalCode;
public string PostalCode
{
get
{
return _PostalCode;
}
set
{
switch (_Country)
{
case Countries.USA:
if (!Regex.IsMatch(value, @"^[0-9]{5}$"))
_errors.Add("PostalCode", "Invalid Zip Code");
break;
case Countries.Canada:
if (!Regex.IsMatch(value, @"^([a-z][0-9][a-z]) ?([0-9][a-z][0-9])$", RegexOptions.IgnoreCase))
_errors.Add("PostalCode", "Invalid postal Code");
break;
default:
throw new ArgumentException("Unknown Country");
}
_PostalCode = value;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您只能在设置国家/地区后验证邮政编码,但似乎无法控制该订单.
我可以使用IDataErrorInfo中的错误字符串,但这不会显示在字段旁边的Html.ValidationMessage中.