首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ to Mocks:访问方法参数

LINQ to Mocks:访问方法参数
EN

Stack Overflow用户
提问于 2019-09-05 17:36:45
回答 1查看 266关注 0票数 2

对于Moq库,我决定使用LINQ来设置模拟。我已经看到了很多示例,这些示例解释了在使用“传统”方法设置模拟时如何使用.Returns访问方法的参数值。

但是你是如何使用的呢?下面是不运行的代码,因为我找不到命名val的方法。val应该是第二个参数的值。(UpdatedValue是单元测试的局部变量。)

代码语言:javascript
复制
IAppSettingLogic MoqAsl = Mock.Of<IAppSettingLogic>(asl => 
    asl.SetAppSettingAsync(AppSettings.LatestReconciliationValue, It.IsAny<string>(), It.IsAny<string>()) ==
    Task.Run(() => UpdatedValue = val));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 18:03:23

对于您所描述的复杂场景,通常使用传统的格式,因为linq更适合简单的快速设置。Linq to mock不允许访问参数值。

代码语言:javascript
复制
var UpdateValue = string.Empty;

var mock = new Mock<IAppSettingLogic>();
mock
    .Setup(_ => _.SetAppSettingAsync(AppSettings.LatestReconciliationValue, It.IsAny<string>(), It.IsAny<string>())
    .Returns( (string arg0, string val, string args3) => {
        UpdatedValue = val;
        return Task.CompletedTask;
    });

IAppSettingLogic MoqAsl = mock.Object;

LINQ对于快速排除通常不需要进一步验证的依赖关系是很好的。如果以后确实需要在这些模拟上验证某些调用,则可以使用Mock.Get(instance)轻松地检索它们。

参考快速启动: LINQ到Mocks

如果您有一些简单的成员可以被模拟,那么您可以混合这两种格式。

代码语言:javascript
复制
//Ling to Mock
IAppSettingLogic MoqAsl = Mock.Of<IAppSettingLogic>(asl => asl.SimpleMember == someSimpleValue);

//Add traditional setup to get access to return function using "Mock.Get(T)"
Mock.Get(MoqAsl)
    .Setup(_ => _.SetAppSettingAsync(AppSettings.LatestReconciliationValue, It.IsAny<string>(), It.IsAny<string>())
    .Returns( (string arg0, string val, string args3) => {
        UpdatedValue = val;
        return Task.CompletedTask;
    });
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57810540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档