C# LINQ到模拟:访问方法参数
刚接触Moq库时,我决定使用LINQ来设置mock。我看过很多示例,这些示例解释了在使用“传统”方法设置模拟时如何使用.Returns访问方法的参数值 但是你怎么用LINQ来模仿呢?下面是我的代码,它没有运行,因为我找不到命名C# LINQ到模拟:访问方法参数,c#,unit-testing,moq,C#,Unit Testing,Moq,刚接触Moq库时,我决定使用LINQ来设置mock。我看过很多示例,这些示例解释了在使用“传统”方法设置模拟时如何使用.Returns访问方法的参数值 但是你怎么用LINQ来模仿呢?下面是我的代码,它没有运行,因为我找不到命名val的方法val应该是第二个参数的值。(UpdatedValue是单元测试的局部变量。) IAppSettingLogic MoqAsl=Mock.Of(asl=> asl.SetAppSettingAsync(AppSettings.latestreCommission
val
的方法val
应该是第二个参数的值。(UpdatedValue
是单元测试的局部变量。)
IAppSettingLogic MoqAsl=Mock.Of(asl=>
asl.SetAppSettingAsync(AppSettings.latestreCommissionValue,It.IsAny(),It.IsAny())==
Task.Run(()=>UpdatedValue=val));
对于您所描述的复杂场景,通常使用传统格式,因为linq to mock更适合简单快速的设置。Linq to mock不允许访问参数值
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 to mock更适合简单快速的设置。Linq to mock不允许访问参数值SPUBLIC async任务SetAppSettingAsync(string,string,string=null){…}@Nkosi我担心。。。谢谢正是我找到的解决办法。谢谢你的指导。
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;
//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;
});