C# visual studio 2012中的单元测试积垢操作

C# visual studio 2012中的单元测试积垢操作,c#,entity-framework,unit-testing,asp.net-mvc-4,C#,Entity Framework,Unit Testing,Asp.net Mvc 4,我正在Visual Studio 2012中测试create类 我的控制器类是: public ActionResult Create() { return View(); } // // POST: /Member/Create [HttpPost] public ActionResult Create(Member member) { if (ModelState.IsValid)

我正在Visual Studio 2012中测试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);
    }
[TestClass]
public class MemberTest
{

    [TestMethod]
    public void Create(Member mem)
    {
        mem.MemID = 123;
        mem.MemName = "sruthy";


        /// dont know what is writing.

    }
}
测试等级为:

  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);
    }
[TestClass]
public class MemberTest
{

    [TestMethod]
    public void Create(Member mem)
    {
        mem.MemID = 123;
        mem.MemName = "sruthy";


        /// dont know what is writing.

    }
}
SampleDataContext.cs

public class SampleDataContext:DbContext
{
    public DbSet<Member> Members { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}
公共类SampleDataContext:DbContext
{
公共数据库集成员{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
}

我被困在测试用例中,请帮助我。

我在单元测试中理解的是:“只测试你的方法在做什么”,所以我认为你必须测试你的方法是否做得很好:

  • ModelState.IsValid

  • db.Members.Add(成员)

  • db.SaveChanges()
但不是ModelState或DbContext的良好行为。它们在自己的单元测试中进行测试。您只需断言调用已完成

要执行这种测试,必须使用依赖项注入模式,并用mock替换真实的DbContext。这些模拟只是断言调用执行良好,而不涉及真正的dbContext


我不是单元测试方面的专家,但我认为为了解耦对象,您必须考虑所有的体系结构。这允许您用mock替换真实对象。

首先-为数据访问代码创建一个抽象(mock DbContext不是很方便的事情):

让你的控制器依赖它

public MemberController(IMemberRepository repository)
{
    this.repository = repository;
}
这将允许轻松地访问模拟数据代码。接下来-编写验证控制器行为的测试(我在这里使用NUnit和Moq):


这正是我想写的答案这也需要清理的
[TearDown]
方法?@christiandev因此在每次测试运行之前为字段分配新的值,您不需要在这里拆卸什么是“RedirectToRouteResult”?
[HttpPost]
public ActionResult Create(Member member)
{
    if (ModelState.IsValid)
    {
        repository.Add(member);
        return RedirectToAction("Index");
    }

    return View(member);
}