使用Moq对服务进行单元测试时返回null数据

时间:2017-12-28 11:00:19

标签: c# unit-testing testing moq

使用Moq进行单元测试接受多个参数的函数时遇到问题。我按照下面的步骤来进行服务。

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

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

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

  4. 我是否遗漏了代码中的任何内容?

    eclipse {
        jdt.file.withProperties { props ->
           props.put('org.eclipse.jdt.core.compiler.codegen.targetPlatform', '9')
           props.put('org.eclipse.jdt.core.compiler.source', '9')
           props.put('org.eclipse.jdt.core.compiler.compliance', '9')
        }
        classpath.defaultOutputDir = new File(buildDir, "classes/main")
    }
    

1 个答案:

答案 0 :(得分:1)

  

之后,使用必需的参数调用服务类中的相关方法,该方法不返回它应该返回的对象(moq对象),而是返回一个null对象。

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

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

为了使mocks在参数方面更加灵活,您可以使用It.IsAny<T>()让mock知道接受传递给它的任何实例。

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

参考Moq Quickstart