2014-09-17 2 views
0

Я получил контроллер клиента какMoq в Mvc метания System.NullReferenceException

 //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 произошло в db.Customers.Add (клиент) в методе Create. Может ли кто-нибудь объяснить мне, где я делаю неправильно?

Я немного новичок в MVC NUnit тестирование

ответ

0

Ваш Mock<DbContext> возвращается нуль для Customers собственности.

Вы, вероятно, нужно сделать что-то вроде этого:

var mockCustomers = new Mock<IList<Customer>>(); // or whatever type it needs to be 
mockContext.Setup(x => x.Customers).Returns(mockCustomers.Object); 
+0

Это ошибка, перегруженный метод имеет некоторые недопустимые аргументы – anu

0

Вам не нужно дразнить 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")); 
} 
Смежные вопросы