Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到模拟:访问方法参数_C#_Unit Testing_Moq - Fatal编程技术网

C# 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

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

但是你怎么用LINQ来模仿呢?下面是我的代码,它没有运行,因为我找不到命名
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;
    });