var header = this.repository.Headers.FirstOrDefault(h => h.Id == id);
以下详细信息,非常感谢!
单元测试
private IRepository _repository;
[TestInitialize]
public void SetUp()
{
_repository = _mockRepository.Stub<IRepository>();
_commandService = new CoreCommandService(_repository);
}
[TestMethod]
public void MyTest()
{
// Line that doesn't work
_repository.Stub(x => x.Headers).Return(SomeThing);
}
实施
// The Headers is stubbed although Id is null
var header = this.repository.Headers.FirstOrDefault(h => h.Id == id);
public interface IRepository
{
IEntityRepository<Header> Headers { get; }
}
更新#1
public interface IEntityRepository<TEntity> : IQueryable<TEntity>, IDisposable where TEntity : class
更新#2
使用以下示例
var wrapper = new HeadersWrapper(...);
_repository.Stub(x => x.Headers).Return(wrapper);
编译时返回以下消息
HeaderWrapper is not assignable to parameter type IEntityRepository<Header>
答案 0 :(得分:0)
困难。
我认为你有两种选择。
如果您可以将Headers
的返回类型从IEntityRepository<T>
更改为IQueryable<T>
,则可以为List<T>
返回可查询的Headers
:
IList<T> list = new List<Header> { /* Some Header object */ }
IQueryable<T> queryableList = list.AsQueryable();
_repository.Stub(x => x.Headers).Return(queryableList);
如果无法更改返回类型,则需要创建一个派生自IEntityRepository<T>
的测试伪(一个新类),并封装一个可查询的List<T>
。您需要实现IEntityRepository<T>
及其接口定义的所有方法,但只需在可查询List<T>
上调用相关函数。然后,如上所述,将相关的Header
添加到基础可查询List<T>
,并将此对象的新实例返回到存根Headers
。
IQueryable<Header>
Wrapper看起来像这样:
public class HeadersWrapper : IQueryable<Header>
{
private readonly IQueryable<Header> _queryableSource;
public HeadersWrapper(IEnumerable<Header> source)
{
_queryableSource = source.AsQueryable();
}
public IEnumerator<Header> GetEnumerator()
{
return _queryableSource.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public Expression Expression
{
get { return _queryableSource.Expression; }
}
public Type ElementType
{
get { return _queryableSource.ElementType; }
}
public IQueryProvider Provider
{
get { return _queryableSource.Provider; }
}
}
你可以使用这样的东西:
var headers = new List<Header>
{
new Header { Id = "foo" }
};
var wrapper = new HeadersWrapper(headers);
repo.Stub(x => x.Headers).Return(wrapper);
当然,如果您愿意,可以IQueryable<Header>
兑换IEntityRepository<Header>
。