Asp.net mvc mvc抛出系统中的Moq.NullReferenceException
我有一个客户控制员Asp.net mvc mvc抛出系统中的Moq.NullReferenceException,asp.net-mvc,nunit,moq,Asp.net Mvc,Nunit,Moq,我有一个客户控制员 //httpget public ActionResult Create() { return View(); } //httppost public ActionResult Create(Customer customer) { if (ModelState.IsValid) { db.Customers.Add(customer);
//httpget
public ActionResult Create()
{
return View();
}
//httppost
public ActionResult Create(Customer customer)
{
if (ModelState.IsValid)
{
db.Customers.Add(customer);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(customer);
}
我已经创建了一个单元测试
[Test]
public void Should_Return_To_Index_Page_After_Saving_A_Valid_Customer()
{
var mockContext = new Mock<DbContext>();
var mockCustomer = new Mock<Customer>();
var sut = new CustomerController(mockContext.Object);
var result = sut.Create(mockCustomer.Object) as RedirectToRouteResult;
Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
}
但它总是向我抛出一个异常类型为“System.NullReferenceException”的异常发生在Create方法中的db.Customers.Addcustomer处。谁能解释一下我哪里做错了
我对MVC nunit测试有点陌生您的模拟为Customers属性返回null
您可能需要这样做:
var mockCustomers = new Mock<IList<Customer>>(); // or whatever type it needs to be
mockContext.Setup(x => x.Customers).Returns(mockCustomers.Object);
在这种情况下,您不需要模拟Customer类和集合。在这种情况下,您应该模拟的唯一依赖项是DbContext
[Test]
public void Should_Return_To_Index_Page_After_Saving_A_Valid_Customer()
{
var mockContext = new Mock<DbContext>();
mockContext.Setup(x => x.Customers).Returns(new List<Customer>());
var sut = new CustomerController(mockContext.Object);
var result = sut.Create(new Customer()) as RedirectToRouteResult;
Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
}
它抛出了一些错误,重载的方法有一些无效的参数