1

庫是一個MVC控制器的道具獲得上下文的實例,我試圖寫一個測試方法來檢查該控制器, 但我得到在容器中調用錯誤..庫從引導容器

我是新的mvc和測試..所以我不知道從哪裏開始 我該怎麼做?

這是測試的樣子:

public void SomeTest() 
    { 
     var controller= new SomeController(); 
     var result = SomeController.Index(); 
     Assert.IsNotNull(result); 
    } 

當我運行測試 System.NullReferenceException類型的異常出現在SomeContext.dll但在用戶代碼中沒有處理我recive錯誤

+0

後的堆棧跟蹤 – Jack

回答

0

貴倉庫被初始化?
在你的控制器:

private Repository Repository {get;set;} 

public ActionResult Index() 
{ 
    Repository = new Repository(); 
    var something = Repository.DoSomeWork(); 
    return View(something); 
} 

在您的測試類:

public void SomeTest() 
{ 
    var controller = new SomeController(); 

    var result = controller.Index(); 

    Assert.IsNotNull(result); 
} 

,或者如果您正在使用依賴注入,與Ninject財產注射,你可以嘗試使用起訂量來注入類:

public class SomeController : Controller 
{ 
    private IRepository repository; 

    [Inject] 
    public IRepository Repository 
    { 
     get { return repository; } 
     set { repository = value; } 
    } 

    // GET: /Some/ 
    public ActionResult Index() 
    { 
     var someCollection = Repository.SomeMethod("some parameter"); 

     foreach (var value in someCollection) 
     { 
      ViewData["message"] += value; 
     } 
     return View(someCollection); 
    } 
} 

與MOQ測試類:

public class SomeTestClass 
{ 
    private Mock<IRepository> mockRepository; 

    [Test] 
    public void GivenSometestThenExpectSomeResult() 
    { 
     // Arrange 
     var controller = new SomeController(); 

     mockRepository = new Mock<IRepository>(); 
     mockRepository.Setup(x => x.SomeMethod(It.IsAny<string>())).Returns(new List<string>()); 

     controller.Repository = mockRepository.Object; 

     // Act 
     ActionResult result = controller.Index(); 

     // Assert 
     Assert.AreEqual("Index", result.ViewName); 
    } 
}