ryu*_*ice 3 c# moq mocking asp.net-mvc-2
我一直在c#中使用Moq框架来进行单元测试中的模拟,但有一件事我还不完全理解.我有这行代码
var feedParserMock = new Mock<ApplicationServices.IFeedParser>();
feedParserMock.Setup(y => y.ParseFeed(csv)).Returns(items).Verifiable();
Run Code Online (Sandbox Code Playgroud)
第二行是否意味着只有传递的参数相同才会返回值?因为我在控制器内部传递给ParseFeed的参数是在控制器内构建的,我在单元测试中无法访问它.目前该方法返回null,有没有办法指定我想返回我的items变量,无论参数是什么?
是.Moq提供了It
静态类,该类具有用于指定满足特定条件的参数的辅助方法.你的例子可能是:
feedParserMock.Setup(y => y.ParseFeed(It.IsAny<string>())).Returns(items).Verifiable();
Run Code Online (Sandbox Code Playgroud)
然后Moq将匹配您的设置,因为参数是指定类型且非null(我在这里选择字符串,您当然应该使用正确的参数类型替换它以便编译代码).
您还可以传递Moq将评估的委托,以确定设置是否匹配.例:
feedParserMock.Setup(y => y.ParseFeed(It.Is<string>(s => s.Length > 3));
Run Code Online (Sandbox Code Playgroud)
这将匹配ParseFeed上的任何方法调用,其中参数是长度大于3的字符串.
查看Moq快速入门指南的"匹配参数"部分以了解更多信息.
归档时间: |
|
查看次数: |
450 次 |
最近记录: |