1

репозиторий является опорой контроллера Mvc, я пытаюсь написать тестовый метод для проверки этого контроллера, , но я получаю сообщение об ошибке в вызове контейнера. .репозиторий получить экземпляр контекста из контейнера начальной загрузки

Я новичок в mvc и тестировании .. так что я не знаю, с чего начать как я могу это сделать?

это как тест выглядит следующим образом:

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

Погрешность я, когда я Получать запустить тест исключение типа System.NullReferenceException произошло в SomeContext.dll, но не был обработан в пользовательском коде

+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 вы можете попробовать использовать Moq, чтобы ввести класс:

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); 
    } 
} 
Смежные вопросы