繁体   English   中英

.NET单元测试 - 使用MVC的Moq / xUnit框架,不返回预期的结果

[英].NET Unit Testing - Moq/xUnit frameworks with MVC, not returning expected results

这是我的情景:

我正在使用.NET MVC 4.0项目,使用存储库(正如您所期望的那样),并尝试将Moq / xUnit测试库实现到.NET单元测试项目中。

我到目前为止:

MVC控制器

private IHOLService _service;

public PolicyController(IHOLService service)
{
      _service = service;
}

public ActionResult Index()
{
     var policies = _service.GetAllPolicies(100, 0).ToList();

     return View(policies);
}

单元测试类

[Fact]
 public void GetPolicies()
 {
            // Arrange
            var mockService = new Mock<IHOLService>();
            List<Policy> policy = new List<Policy>()
            mockService.Setup(cr => cr.GetAllPolicies(10, 0)).Returns(policy);
            var controller = new PolicyController(mockService.Object);

            // policy here contains 0 results.

             // Act
        var result = (ViewResult)controller.Index();

        var model = result.ViewData.Model; // equals 0.

        // Assert
        var listCategories = Assert.IsAssignableFrom<List<Policy>>(result.ViewData.Model);

         // listCategories.Count equals 0 results.

        Assert.Equal(10, listCategories.Count); // Thus always fails
  }

我的问题是,当直接调用Controller时,一切正常,加载了100个策略。

但是,当我运行测试时,会加载0个产品,其中我猜测是某个地方的模拟调用存在问题,可能与服务初始化有关。 有没有人曾经有这个,可以提供建议?

另外,我是否正确测试我的服务,而不是我在数据层保存的存储库?

提前致谢。

在测试代​​码中,将policy初始化为空列表,然后告诉模拟服务返回此空列表。 要制定测试加载策略,您需要将一些策略实例放入policy列表中。

我会写一个看起来像这样的测试:

[Fact]
public void GetPolicies()
{
   // Arrange
   var mockService = new Mock<IHOLService>();
   Policy expectedPolicy = new Policy(); // substitute for the real way you construct these
   List<Policy> policy = new List<Policy>() { expectedPolicy };
   mockService.Setup(cr => cr.GetAllPolicies(10, 0)).Returns(policy);

   // Act
   var result = (ViewResult)controller.Index();

   var model = result.ViewData.Model; // equals 0.

   // Assert
   var listCategories = Assert.IsAssignableFrom<List<Policy>>(result.ViewData.Model);

   Assert.Equal(expectedPolicy, listCategories.First());        
}

但这实际上取决于您尝试进行单元测试的代码的哪个方面。 从我所看到的,此测试只是确认您正在按预期存储Policy对象。 您可以为依赖于Policy实例本身的任何逻辑编写进一步的测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM