所以,我有一个带有此签名的方法:
IList<Mail> FindFilteredPaged(
QueryFilter filter,
int pageIndex,
int pageSize,
out int totalRecords);
我希望设置期望值,以便检查filter
参数是否为空。问题出在最后的out
paremter。我目前的期望设置如下:
Expect
.Call(registryMailService.FindFilteredPaged(
Arg<QueryFilter<IncomingMail>>.Is.Anything,
Arg<Int32>.Is.Anything,
Arg<Int32>.Is.Anything,
out Arg<Int32>.Out(20).Dummy))
.Callback<QueryFilter<IncomingMail>, Int32, Int32>((p1, p2, p3) =>
{
filterWasNotSpecified = p1 == null;
});
但是,没有运气。安装程序崩溃时出现Callback arguments didn't match the method arguments
异常。有关如何做到这一点的任何建议?有没有办法只使用第一个参数并跳过其余参数?
感谢。
答案 0 :(得分:4)
您可能遇到以下情况:
“lambda表达式不能直接从封闭方法中捕获ref或out参数。”
http://msdn.microsoft.com/en-us/library/bb397687.aspx
编辑:您可以创建/使用自定义委托...例如声明...
public delegate void SomeAction<T1, T2, T3>( out T1 a, ref T2 b, T3 c );
然后在你的测试中...
SomeAction<int, string, string> fakeDoSomething = ( out int outParam, ref string refParam, string param ) =>
{
outParam = 123;
refParam = "123";
};
using ( m_Mocks.Record() )
{
Expect.Call( () => m_MockService.DoSomething( out outInt, ref refString, someString ) ).Do( fakeDoSomething );
}
答案 1 :(得分:0)
在c#
中使用可选参数