我真的很努力让这个工作。我有一个通用的存储库模式,我需要使用Microsoft Fakes来存储存储库接口。
public interface IDataAccess<T> where T : class
{
void Add(T entity);
void Update(T entity);
void Delete(T entity);
void Delete(Expression<Func<T, bool>> where);
T FindById(long id);
T FindById(string id);
T Find(Expression<Func<T, bool>> where);
IEnumerable<T> FindAll();
IEnumerable<T> FindMany(Expression<Func<T, bool>> where);
IQueryable<T> Find(Expression<Func<T, bool>> predicate = null, params Expression<Func<T, object>>[] includes);
IQueryable<T> FindIncluding(params Expression<Func<T, object>>[] includeProperties);
}
尝试为
创建存根IQueryable<T> Find(Expression<Func<T, bool>> predicate = null, params Expression<Func<T, object>>[] includes);
IQueryable<T> FindIncluding(params Expression<Func<T, object>>[] includeProperties);
在我的考试中......
IDataAccess<EnterprisePermissionSet> dataAccess = new HG.Fus.Authentication.Data.Fakes.
StubIDataAccess<EnterprisePermissionSet>()
{
FindIncludingExpressionOfFuncOfT0ObjectArray = () => { };
};
我根本不知道如何构建这个存根,
答案 0 :(得分:0)
MsFakes
使用代码生成来替换伪方法,创建存根等...
要替换特定方法,您必须设置基于方法签名的新方法(Action
或Func
),该方法将接收对此特定方法的任何调用。
您想伪造的方法的签名是:
IQueryable<T> FindIncluding(params Expression<Func<T, object>>[] includeProperties);
根据此签名,您必须设置Func
,其中包含Expression<Func<T, object>>
数组并返回IQueryable<T>
。
以下代码段显示了一个替换上述方法的简单示例:
fakeDataAccess.FindIncludingExpressionOfFuncOfT0ObjectArray = expressions =>
{
// here you can create the logic / fill the return value and etc...
return new List<EnterprisePermissionSet>().AsQueryable(); \\this example is match your T
};
模拟IQueryable<T>
的最简单方法是通过AsQueryable()
返回一个集合,另一种方法是使用EnumerableQuery
类。
以下是替换的示例:IQueryable<T> Find(Expression<Func<T, bool>> predicate = null, params Expression<Func<T, object>>[] includes);
fakeDataAccess.FindExpressionOfFuncOfT0BooleanExpressionOfFuncOfT0ObjectArray =
(expression, expressions) =>
{
// here you can create the logic / fill the return value and etc...
return new List<EnterprisePermissionSet>().AsQueryable();
};