【问题标题】:testing controller using MOQ calling repository使用 MOQ 调用存储库测试控制器
【发布时间】:2010-10-27 00:32:27
【问题描述】:

我对 Mocking 很陌生。在下面的示例中,我正在使用 Moq 并尝试创建一个 _companyRepository。然而,第二个测试有一个空参考。即公司没有被实例化。

Assert.AreEqual(viewModel.Company.Name, "MyCompany");

认为我在这里遗漏了一些愚蠢的东西。

    [TestClass]
    public class ErrorControllerTest
    {

        private Mock<ICompanyRepository> _companyRepository;

        public ErrorController CreateErrorController()
        {
            _companyRepository = new Mock<ICompanyRepository>();
            _companyRepository.Setup(c => c.Get(2)).Returns(new Company {Name = "MyCompany"});
            return new ErrorController(_companyRepository.Object);
        }


        [TestMethod]
        public void Test()
        {

            var controller = CreateErrorController();
            controller.Test(""); // action is called
            var viewModel = (ErrorViewModel)controller.ViewData.Model;
            Assert.IsInstanceOfType(controller.ViewData.Model, typeof(ErrorViewModel));
            Assert.AreEqual(viewModel.Company.Name, "MyCompany");
        }
     }

控制器

public class ErrorController : Controller
{

   private readonly ICompanyRepository _companyRepository;

    public ErrorController(ICompanyRepository companyRepository) 
    {
        _companyRepository = companyRepository;
    }


    public ActionResult Test()
    {
        var company = _companyRepository.Get(2);
        var viewModel = new ErrorViewModel
        {
            Company = company
        };

        return View(viewModel);
    }

}

【问题讨论】:

  • 写下控制器动作。
  • 嗯...我看不出有什么问题。你可以试试.Setup(c =&gt; c.Get(It.IsAny&lt;int&gt;()))。当您调试测试并逐步执行代码并在您的操作中到达_companyRepository.Get(2) - 返回null? Ps,您的第一个断言毫无价值,因为如果它不是ErrorViewModel 类型,则上面一行的强制转换会引发异常。请改用var viewModel = controller.ViewData.Model as ErrorViewModel;

标签: asp.net-mvc-2 moq


【解决方案1】:

这行得通....猜猜我没有编译所有内容。很笨。

我这样做是对的。欣赏任何cmets。

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 2014-12-03
    • 2017-08-16
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多