Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
.net 如何调用Moq中作为参数传递的谓词?_.net_Unit Testing_Mocking_Moq - Fatal编程技术网

.net 如何调用Moq中作为参数传递的谓词?

.net 如何调用Moq中作为参数传递的谓词?,.net,unit-testing,mocking,moq,.net,Unit Testing,Mocking,Moq,我有一个接口,它有一个名为: IEnumerable<string> GetFilesInADirectoryWhere( string directory, string wildcard, Predicate<string> filter); 这会编译,但当调用此模拟方法时,会出现以下运行时异常: SetUp : System.Reflection.TargetParameterCountException : Parame

我有一个接口,它有一个名为:

IEnumerable<string> GetFilesInADirectoryWhere(
     string directory, 
     string wildcard, 
     Predicate<string> filter);
这会编译,但当调用此模拟方法时,会出现以下运行时异常:

    SetUp : System.Reflection.TargetParameterCountException : Parameter count mismatch.
       at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Delegate.DynamicInvokeImpl(Object[] args)
       at Moq.Extensions.InvokePreserveStack(Delegate del, Object[] args)
       at Moq.MethodCallReturn`2.Execute(ICallContext call)
       at Moq.Interceptor.Intercept(ICallContext invocation)
       at Moq.Proxy.CastleProxyFactory.Interceptor.Intercept(IInvocation invocation)
       at Castle.DynamicProxy.AbstractInvocation.Proceed()
       at Castle.Proxies.IDiskProxy.GetFilesInADirectoryWhere(String directory, String filter, Predicate`1 predicate)

知道我做错了什么吗?

你调用了错误的
返回
重载。应该是:

  • 返回(Func)
    -匹配方法的签名
安装程序应如下所示:

myMock
    .Setup(m => m.GetFilesInADirectoryWhere(
        @"My Folder", 
        @"FooFile*.*", 
        It.IsAny<Predicate<string>>())
    )
    .Returns<string, string, Predicate<string>>((dir, wildcard, filter) =>  
        cannedFileNames.Where(filename => filter(filename))
    );
myMock
.Setup(m=>m.getfilesindirectorywhere(
@“我的文件夹”,
@“FooFile**”,
It.IsAny())
)
.返回((目录、通配符、筛选器)=>
cannedFileNames.Where(文件名=>过滤器(文件名))
);
myMock
    .Setup(m => m.GetFilesInADirectoryWhere(
        @"My Folder", 
        @"FooFile*.*", 
        It.IsAny<Predicate<string>>())
    )
    .Returns<string, string, Predicate<string>>((dir, wildcard, filter) =>  
        cannedFileNames.Where(filename => filter(filename))
    );