C# 使用Rhino Mock的存储库对象的存根函数表达式
我正在使用Rhino Mock对一个服务方法进行单元测试,该方法进行以下调用:C# 使用Rhino Mock的存储库对象的存根函数表达式,c#,mocking,rhino-mocks,C#,Mocking,Rhino Mocks,我正在使用Rhino Mock对一个服务方法进行单元测试,该方法进行以下调用: var form = Repo.GetOne<Form>(f => f.Id == formId, "FormTemplate, Event"); var form=Repo.GetOne(f=>f.Id==formId,“FormTemplate,Event”); Repo.GetOne方法签名为: TEntity GetOne<TEntity>( Expr
var form = Repo.GetOne<Form>(f => f.Id == formId, "FormTemplate, Event");
var form=Repo.GetOne(f=>f.Id==formId,“FormTemplate,Event”);
Repo.GetOne方法签名为:
TEntity GetOne<TEntity>(
Expression<Func<TEntity, bool>> filter = null,
string includeProperties = null)
where TEntity : class, IEntity;
TEntity GetOne(
表达式筛选器=空,
字符串includeProperties=null)
其中张力:阶级性、张力;
到目前为止,我只通过忽略函数表达式参数实现了这一点:
_mockRepo.Stub(
r =>
r.GetOne<Form>(
Arg<Expression<Func<Form, bool>>>.Is.Anything,
Arg<string>.Is.Equal("FormTemplate, Event")))
.Return(form);
\u mockRepo.Stub(
r=>
r、 GetOne(
Arg.Is.任何东西,
参数等于(“FormTemplate,Event”))
.报税表(表格);
如何存根Repo.GetOne方法,以便在使用参数调用该方法时设置返回值
f=>f.Id==formId,“FormTemplate,Event”
?当设置存根/模拟时,调用mockArg.Equals(runtimeArg)
时,用于参数的值必须返回true。您的Func
不会这样做,因此最好使用Arg.Matches()
约束,该约束接受一个函数,在给定存根输入的情况下,如果运行时输入是匹配的,则返回true
不幸的是,查看Func
委托的内容并不简单。(看一看)
var myArgChecker=新函数(输入=>
{
//检查输入以确定是否匹配
返回true;//如果不想应用此存根,则返回false
});
_回购存根(
r=>
r、 GetOne(
Arg.Matches(输入=>myArgChecker(输入)),
参数等于(“FormTemplate,Event”))
.报税表(表格);
设置存根/模拟时,调用mockArg.Equals(runtimeArg)
时,用于参数的值必须返回true。您的Func
不会这样做,因此最好使用Arg.Matches()
约束,该约束接受一个函数,在给定存根输入的情况下,如果运行时输入是匹配的,则返回true
不幸的是,查看Func
委托的内容并不简单。(看一看)
var myArgChecker=新函数(输入=>
{
//检查输入以确定是否匹配
返回true;//如果不想应用此存根,则返回false
});
_回购存根(
r=>
r、 GetOne(
Arg.Matches(输入=>myArgChecker(输入)),
参数等于(“FormTemplate,Event”))
.报税表(表格);
谢谢,这真的很有帮助。我在这篇文章中将这种方法与表达式平等检查器相结合,最终找到了一个解决方案:谢谢,这真的很有帮助。在这篇文章中,我通过将此方法与表达式等式检查器相结合,得出了一个解决方案:
var myArgChecker = new Function<Expression<Func<Form, bool>>, bool>(input =>
{
//inspect input to determine if it's a match
return true; //or false if you don't want to apply this stub
});
_mockRepo.Stub(
r =>
r.GetOne<Form>(
Arg<Expression<Func<Form, bool>>>.Matches(input => myArgChecker(input)),
Arg<string>.Is.Equal("FormTemplate, Event")))
.Return(form);