具有采用谓词的通用方法的存根接口
Stub interface with generic methods that take predicates
我真的很难让它发挥作用。我有一个通用存储库模式,我需要使用 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 = () => { };
};
我只是不知道如何构建这个存根,
MsFakes
使用代码生成来替换伪方法、创建存根等...
要替换特定方法,您必须设置新方法(Action
或 Func
基于方法签名),它将接收对该特定方法的任何调用。
您要伪造的方法的签名是:
IQueryable<T> FindIncluding(params Expression<Func<T, object>>[] includeProperties);
基于此签名,您必须设置一个 Func
,它获得一个 Expression<Func<T, object>>
和 return 的数组 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()
return一个集合,另一种方法是使用EnumerableQuery
class.
这里是要替换的例子: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();
};
我真的很难让它发挥作用。我有一个通用存储库模式,我需要使用 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 = () => { };
};
我只是不知道如何构建这个存根,
MsFakes
使用代码生成来替换伪方法、创建存根等...
要替换特定方法,您必须设置新方法(Action
或 Func
基于方法签名),它将接收对该特定方法的任何调用。
您要伪造的方法的签名是:
IQueryable<T> FindIncluding(params Expression<Func<T, object>>[] includeProperties);
基于此签名,您必须设置一个 Func
,它获得一个 Expression<Func<T, object>>
和 return 的数组 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()
return一个集合,另一种方法是使用EnumerableQuery
class.
这里是要替换的例子: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();
};