2012-05-24 23 views
2

我使用Moq包來測試控制器。 HomeController.csAssert.IsInstanceOfType在Moq包中失敗Mvc3

public class HomeController : Controller 
{ readonly IPermitRepository _repository; 
    public HomeController(IPermitRepository rep) 
    {   this._repository = rep;  } 

    public ViewResult Index() 
    { 
     ViewBag.Message = "Hello World"; 
     PermitModel model = _repository.GetPermitDetails(); 
     return View(model); 
    } 
} 

在HomeControllerTest.cs

[TestClass] 
Public class HomeControllerTest 
{ 
    [TestMethod] 
    public void Index() 
    {  
     var messagingService = new Mock<IPermitRepository>(); 
     var controller = new HomeController(messagingService.Object); 

     var result = controller.Index() as ViewResult; 
     Assert.IsInstanceOfType(result.Model, typeof(PermitModel)); 
    } 
} 

但它給錯誤。 Assert.IsInstanceOfType失敗。預期類型:實際類型:<(null)>。

有人可以提供解決方案,還有一些關於MVC3中的Moq包的inf。 在此先感謝

回答

2

對於每個非void方法調用默認返回null默認情況下。

所以當你的控制器中你打電話_repository.GetPermitDetails();它返回null這就是爲什麼你的測試失敗。

你需要調用Setup你的方法返回的東西:

var messagingService = new Mock<IPermitRepository>(); 
messagingService.Setup(m => m.GetPermitDetails()).Returns(new PermitModel()); 
var controller = new HomeController(messagingService.Object); 

你可以找到關於如何定製仿製品的行爲在Moq quickstart更多信息。

+0

感謝解決方案確實爲我工作。 – Padmalochan

+0

@Padmalochan我很高興它有幫助。您可以接受它作爲答案:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – nemesv