使用Moq进行单元测试接受多个参数的函数时遇到问题。我按照下面的步骤来进行服务。
为界面创建了一个模拟对象。接口中的相关方法包含四个参数,即int类型,集合和对象。所以我首先启动了那些首先需要的变量,
然后设置模拟对象以返回预定义类型的对象。
之后,使用所需的参数调用服务类中的相关方法,该方法不返回它应该返回的对象(moq对象),而是返回一个null对象。
我是否遗漏了代码中的任何内容?
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")
}
答案 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);