Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET单元测试-使用MVC的Moq/xUnit框架,不返回预期结果_C#_.net_Moq_Xunit.net - Fatal编程技术网

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

C# .NET单元测试-使用MVC的Moq/xUnit框架,不返回预期结果,c#,.net,moq,xunit.net,C#,.net,Moq,Xunit.net,以下是我的设想: 我正在使用一个.NETMVC4.0项目和一个存储库(正如您所期望的),并尝试将Moq/xUnit测试库实现到一个.NET单元测试项目中 我已经做到了这一点: MVC控制器 private IHOLService _service; public PolicyController(IHOLService service) { _service = service; } public ActionResult Index() { var policies

以下是我的设想:

我正在使用一个.NETMVC4.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
  }
[事实]
公共政策()
{
//安排
var mockService=new Mock();
列表策略=新列表()
mockService.Setup(cr=>cr.getAllPolicys(10,0)).Returns(policy);
var controller=newpolicycontroller(mockService.Object);
//此处的策略包含0个结果。
//表演
var result=(ViewResult)controller.Index();
var model=result.ViewData.model;//等于0。
//断言
var listCategories=Assert.IsAssignableFrom(result.ViewData.Model);
//listCategories.Count等于0个结果。
Assert.Equal(10,listCategories.Count);//因此总是失败
}
我的问题是,当直接调用控制器时,一切正常,加载了100个策略

然而,当我运行测试时,加载了0个产品,我猜这是一个模拟调用的问题,可能与服务初始化有关。有没有人曾经有过这样的经历并能提供建议

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


提前感谢。

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

我将编写一个类似以下内容的测试:

[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());        
}
[事实]
公共政策()
{
//安排
var mockService=new Mock();
Policy expectedPolicy=new Policy();//替换您构建这些策略的实际方式
列表策略=新列表(){expectedPolicy};
mockService.Setup(cr=>cr.getAllPolicys(10,0)).Returns(policy);
//表演
var result=(ViewResult)controller.Index();
var model=result.ViewData.model;//等于0。
//断言
var listCategories=Assert.IsAssignableFrom(result.ViewData.Model);
Assert.Equal(expectedPolicy,listCategories.First());
}

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

也许我看错了,所以您应该在代码中创建一组测试对象,比如说100个随机对象,然后将它们加载到.Setup中,并针对这些对象进行测试?我已经猜到了。返回意味着它将把.getAllPolicys()的结果加载到该对象中。实际上,我已经更新了我的问题,在单元测试的最后部分有了更多的内容。对于您的输入,我猜这更多地与问题所在的控制器调用有关,因为没有从中返回结果?是的-创建您想在测试中返回的对象,
返回
只返回您告诉它的实例。真正的GetAllPolicys永远不会被调用。这很好,但是你能看到控制器方面的问题吗?我想这就是证明问题的部分。我猜这与:var controller=newpolicycontroller(mockService.Object);但不知道为什么。