首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET单元测试-使用MVC的Moq/xUnit框架,不返回预期结果

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

Stack Overflow用户
提问于 2012-11-19 09:27:42
回答 1查看 3.9K关注 0票数 3

下面是我的场景:

我正在使用一个MOQMVC4.0项目,它有一个存储库(正如您所期望的),并试图将.NET /xUnit测试库实现为一个.NET单元测试项目。

我已经走了这么远:

MVC控制器

代码语言:javascript
复制
private IHOLService _service;

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

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

     return View(policies);
}

单元测试类

代码语言:javascript
复制
[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种产品,我猜这可能是模拟调用的问题,这可能与服务初始化有关。有没有人有过这样的经历,并能提供建议?

此外,我是否正确地测试了我的服务,而不是存储在数据层上的存储库?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-19 09:57:20

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

我会写一个类似于这样的测试:

代码语言:javascript
复制
[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());        
}

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13450870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档