【问题标题】:Return data null when unit test the service using Moq使用 Moq 对服务进行单元测试时返回数据 null
【发布时间】:2017-12-28 11:00:19
【问题描述】:

我在使用 Moq 对接受多个参数的函数进行单元测试时遇到问题。我做了以下步骤来最小起订量服务。

  1. 创建了一个模拟对象来接口。接口中的相关方法包含四个参数,即int类型、集合和对象。所以我首先初始化了那些需要的变量,

  2. 然后设置模拟对象以返回预定义类型的对象。

  3. 在使用所需参数调用服务类中的相关方法之后,该方法不会返回它应该返回的对象(起订量对象),而是返回一个空对象。

我是否遗漏了以下代码中的任何内容?

 Collection<MyDocumentSample spec = new Collection<MyDocumentSample()
 { 
  new MyIdSample() { SampleID = 1234 } };
  int index = 0;
  int maxNoOfRows = 2;
  MyDocumentListSortFields sortFeild = new
  MyDocumentListSortFields() 
  { 
       Descending = false, 
       SortField = MyDocumentListSortFields.SortFields.Date 
  };


var bundleOfObjects = new bundleOfObjects { Entry = new List<bundleOfObjects.EntryComponent() };

MySampleDocument resource_1 = new MySampleDocument();
resource_1.Id = "1005823";
resource_1.Description = "Test 1";
resource_1.Created = "11/20/2017 12:59:47 PM";


bundleOfObjects.AddTobundleOfObjects(resource_1, null);
var m_documentWrapperHelperMock = new Mock<IDocumentSampleHelper();
var m_configMock = new Mock<IConfiguration();

m_documentWrapperHelperMock.Setup(x => x.GetSampleDocumentsWithOffSets(spec, index, maxNoOfRows, sortFeild)).Returns(bundleOfObjects);


var service = new MySampleDocumentService(m_configMock.Object, m_documentWrapperHelperMock.Object);

【问题讨论】:

  • 请添加您要测试的代码。有一堆自定义类型,因此很难判断 moq 是连接不正确还是其他错误
  • 您将一个空的 m_configMock 对象传递给服务,设置在哪里?
  • 一目了然,我在该代码中看到一个语法错误。如果您不发布实际运行的代码,可能很难提供帮助,因为很容易产生错误的想法。

标签: c# unit-testing testing moq


【解决方案1】:

在使用所需参数调用服务类中的相关方法之后,该方法不会返回它应该返回的对象(起订量对象),而是返回一个空对象。

在默认模式下,Moq 将返回 null,当模拟没有像设置时那样被调用,包括参数。验证您调用模拟成员的方式是否与设置调用的方式相同。

模拟框架很可能无法验证用于设置模拟方法的硬编码值的相等性。

要使模拟在参数方面更加灵活,您可以使用It.IsAny&lt;T&gt;() 让模拟知道接受传递给它的任何实例。

m_documentWrapperHelperMock
    .Setup(_ => _.GetSampleDocumentsWithOffSets(
                     It.IsAny<Collection<MyDocumentSample>>(), 
                     It.IsAny<int>(), 
                     It.IsAny<int>(), 
                     It.IsAny<MyDocumentListSortFields>()
                 )
    ).Returns(bundleOfObjects);

参考Moq Quickstart

【讨论】:

  • 它的工作谢谢,有一个语法问题,.Setup(_ => _.GetSampleDocumentsWithOffSets(
猜你喜欢
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 2012-06-01
相关资源
最近更新 更多