【发布时间】:2011-04-22 04:41:22
【问题描述】:
编码人员,我正在为 Asp.net MVC 3 项目编写测试用例,我需要调用一个使用实体框架将数据插入数据库的操作方法。下面是action方法的代码:
//
// POST: /School/Create
[HttpPost]
public ActionResult Create(School school)
{
if (ModelState.IsValid)
{
db.Schools.Add(school);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(school);
}
这是我的测试方法的代码:
[TestMethod]
public void CreateNewSchool()
{
var schoolController = new SchoolController();
var viewResult = schoolController.Index();
//creating a school object
School school = new School();
school.Name = "OOO";
//passing the school object to the action method
schoolController.Create(school);
//making sure that the model is not null
Assert.IsNotNull(viewResult.Model);
}
但是请注意,我不检查数据是否实际插入到数据库中。我只是检查视图的模型不为空。我确实使用 SQL Server Management Studio 手动检查数据库。
问题在于,当我在测试方法中调用操作方法以在数据库中创建/插入记录时,数据库没有发生任何事情。但是,如果我运行应用程序并浏览到创建页面并尝试创建新记录,那么该记录将被添加到数据库中。所以在我看来,只有当我运行应用程序并实际浏览到创建页面并点击创建按钮时才会插入数据库,但我不能以编程方式调用测试方法中的操作方法以在数据库中插入新记录。我还调试了测试用例,它确实命中了 db.SaveChanges();操作方法中的行,但数据库中没有反映任何更改。
那么,有人可以向我解释为什么我无法通过在我的测试方法中调用 action 方法来插入记录吗?
提前致谢。
【问题讨论】:
标签: unit-testing entity-framework asp.net-mvc-3