【问题标题】:repository get an instance of a context from a bootstrap container存储库从引导容器中获取上下文的实例
【发布时间】:2023-04-05 09:12:01
【问题描述】:

存储库是 Mvc 控制器的一个道具,我正在尝试编写一个测试方法来检查这个控制器, 但我在容器调用中遇到错误...

我是 mvc 和测试新手.. 所以我不知道从哪里开始 我该怎么做?

这是测试的样子:

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

我在运行测试时收到的错误 SomeContext.dll 中发生了System.NullReferenceException 类型的异常,但未在用户代码中处理

【问题讨论】:

    标签: unit-testing controller asp.net-mvc-5 repository-pattern bootstrapping


    【解决方案1】:

    您的存储库是否已初始化?
    在您的控制器中:

    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);
        }
    }
    

    和最小起订量的测试类:

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多