C# mvc4实体框架中CRUD操作中的单元测试
我试图研究mvc4中的实体框架。我用CRUD操作在EF中创建了一个项目。现在我想对此进行单元测试(主要是依赖项注入)。我在谷歌上搜索了很多网站,尝试了模拟测试方法C# mvc4实体框架中CRUD操作中的单元测试,c#,entity-framework,unit-testing,asp.net-mvc-4,C#,Entity Framework,Unit Testing,Asp.net Mvc 4,我试图研究mvc4中的实体框架。我用CRUD操作在EF中创建了一个项目。现在我想对此进行单元测试(主要是依赖项注入)。我在谷歌上搜索了很多网站,尝试了模拟测试方法 http://www.codeproject.com/Articles/447988/How-to-Mock-Test-an-Entity-Framework-Model-First-P 但它没有起作用。实际上,单元测试EF的最佳方法是什么?为测试创建类或创建测试项目。这是我的crud操作代码,我怎样才能单元测试这个,请帮助我 Me
http://www.codeproject.com/Articles/447988/How-to-Mock-Test-an-Entity-Framework-Model-First-P
但它没有起作用。实际上,单元测试EF的最佳方法是什么?为测试创建类或创建测试项目。这是我的crud操作代码,我怎样才能单元测试这个,请帮助我
Member.cs
public class Member
{
[Key]
public int MemID {get;set;}
[Required]
[Display(Name = "Member Name")]
[StringLength(50)]
public string MemName { get; set; }
}
成员控制器
public class MemberController : Controller
{
private SampleDataContext db = new SampleDataContext();
//
// GET: /Member/
public ActionResult Index()
{
return View(db.Members.ToList());
}
//
// GET: /Member/Details/5
public ActionResult Details(int id = 0)
{
Member member = db.Members.Find(id);
if (member == null)
{
return HttpNotFound();
}
return View(member);
}
//
// GET: /Member/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Member/Create
[HttpPost]
public ActionResult Create(Member member)
{
if (ModelState.IsValid)
{
db.Members.Add(member);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(member);
}
//
// GET: /Member/Edit/5
public ActionResult Edit(int id = 0)
{
Member member = db.Members.Find(id);
if (member == null)
{
return HttpNotFound();
}
return View(member);
}
//
// POST: /Member/Edit/5
[HttpPost]
public ActionResult Edit(Member member)
{
if (ModelState.IsValid)
{
db.Entry(member).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(member);
}
//
// GET: /Member/Delete/5
public ActionResult Delete(int id = 0)
{
Member member = db.Members.Find(id);
if (member == null)
{
return HttpNotFound();
}
return View(member);
}
//
// POST: /Member/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
Member member = db.Members.Find(id);
db.Members.Remove(member);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
一般来说,我认识的大多数人都同意单元测试是关于隔离测试的。您提议的测试将测试您的控制器、模型和持久性层(以及您拥有的任何业务逻辑) 其次,考虑到数据库都是关于状态的,单元测试应该是无状态的……这将再次变得困难 但是…幸运的是…我一直在考虑如何使用SQL Server Compact和
DropDatabaseAlways
数据库初始值设定项创建无状态集成测试
public class FooContext : DbContext
{
public FooContext(IDbInitializer<T> init = null, bool forceInit = false)
{
if(init != null)
Database.SetInitializer(init);
if(forceInit)
Database.Init(true);
}
}
这里的技巧是将测试项目设置为使用SQLServerCE连接字符串,并将DropDatabaseAlways
作为初始值设定项注入
public class FooContext : DbContext
{
public FooContext(IDbInitializer<T> init = null, bool forceInit = false)
{
if(init != null)
Database.SetInitializer(init);
if(forceInit)
Database.Init(true);
}
}
公共类FooContext:DbContext
{
公共FooContext(IDB初始值设定项init=null,bool forceInit=false)
{
if(init!=null)
SetInitializer(init);
if(forceInit)
Database.Init(true);
}
}
是,您可以通过各种类型的测试来测试代码。添加类库和测试代码的最简单方法。另一种方法是,您可以使用NUnit来测试它。为此,您必须添加某些dll文件才能使用NUnit。您能更详细地描述一下您想在这里测试什么吗?@Dawid:我只想测试每个crud操作,并知道如何在其中进行测试EF@siddhesh:你能告诉我怎么做吗,或者请建议一个教程,我正在尝试很多方法你可以参考:[链接]()