C# 如何填写一份企业报告
我试图用rhino Mock在C#中存根下面的代码行,尽管没有成功。有什么建议吗?这是导致测试失败的线路C# 如何填写一份企业报告,c#,unit-testing,rhino-mocks,C#,Unit Testing,Rhino Mocks,我试图用rhino Mock在C#中存根下面的代码行,尽管没有成功。有什么建议吗?这是导致测试失败的线路 var header = this.repository.Headers.FirstOrDefault(h => h.Id == id); 详情如下,非常感谢 单元测试 private IRepository _repository; [TestInitialize] public void SetUp() { _repository = _mockRepo
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);
}
编译时返回以下消息
HeaderWrapper is not assignable to parameter type IEntityRepository<Header>
HeaderRapper不可分配给参数类型IEntityRepository
很难
我想你有两个选择
如果可以将标题
的返回类型从IEntityRepository
更改为IQueryable
,则可以为标题
返回可查询的列表
:
IList<T> list = new List<Header> { /* Some Header object */ }
IQueryable<T> queryableList = list.AsQueryable();
_repository.Stub(x => x.Headers).Return(queryableList);
你可以这样使用它:
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);
var headers=新列表
{
新标题{Id=“foo”}
};
var wrapper=新标题包装器(标题);
repo.Stub(x=>x.Headers).Return(包装器);
当然,如果愿意,您可以将
IQueryable
交换为IEntityRepository
。测试是否因异常而失败?什么是什么东西?它是一个至少有一个条目的IEntityRepository
集合吗?这就是我一直坚持的,不确定应该是什么:(IEntityRepository
实现了一些集合类型,比如IEnumerable
,我想?请提供更多详细信息-你所说的“失败”是什么意思确切地说?测试失败时发生了什么?错误是以前的方法“IRepository.get_Headers();”需要返回值或引发异常。我将对此进行调查并让您知道。感谢您努力编写一个包装查询表的假类tbh:(用包装器类更新谢谢,我用我遇到的一个问题更新了这个问题。这是一个例子,使用了IQueryable
。我不知道你的IEntityRepository
类是什么样子,所以我不能使用它。要解决你最近的问题,请更改headerRapper
以实现IEntityRepository
,并删除接口添加的任何方法。
IList<T> list = new List<Header> { /* Some Header object */ }
IQueryable<T> queryableList = list.AsQueryable();
_repository.Stub(x => x.Headers).Return(queryableList);
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);