Aar*_*ker 35 c# rhino-mocks iqueryable mocking
我正在创建一个公开IQueryable的存储库.对我的单元测试进行模拟的最佳方法是什么?
由于我在其余的模拟对象中使用RhinoMocks,我尝试执行以下操作:
IQueryable<MyObject> QueryObject =
MockRepository.GenerateStub<IQueryable<MyObject>>();
Run Code Online (Sandbox Code Playgroud)
这不起作用,所以我尝试这样做:
IQueryable<MyObject> QueryObject =
(new List<MyObject> { new MyObject() }).AsQueryable();
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点,或者有任何其他模拟框架构建支持IQueryable?
我的存储库界面如下所示:
public interface IRepository<T> where T : TableServiceEntity
{
IQueryable<T> Table { get; }
void Attach(T existingItem);
void Delete(T itemToDelete);
void Insert(T newItem);
T Load(string partitionKey, string rowKey);
IEnumerable<T> Load(string partitionKey);
IEnumerable<T> Query(IQueryable<T> query);
IEnumerable<T> Last(int count);
T Last();
void Update(T item);
}
Run Code Online (Sandbox Code Playgroud)
这是我要测试的方法:
public Post LoadPost(int year, int month, int day, string slug)
{
var query = from p in _blogRepository.Table
where
p.PartitionKey == Key.Partition(year, month, day)
&& p.Slug == slug
select p;
var posts = _blogRepository.Query(query.Take(1));
return posts.First();
}
Run Code Online (Sandbox Code Playgroud)
然后这是测试,因为我现在有测试LoadPost.
[Fact]
public void LoadWillRetrieveByPartitionKeyAndRowKeyWhenUsingUriFormat()
{
Repository
.Stub(x => x.Query(Arg<IQueryable<Post>>.Is.Anything))
.Return(new List<Post> {_post});
var result = Service.LoadPost(
_post.Year(),
_post.Month(),
_post.Day(),
_post.Slug);
Assert.NotNull(result);
}
Run Code Online (Sandbox Code Playgroud)
代码来自我的AzureBlog项目.
Grz*_*nio 10
我通常会完成您在测试中最终完成的工作.在编写测试时,我假设.Net库类正常工作并且不包含错误,因此我可以在测试中使用它们.当我需要测试列表,集合,可查询,字典等时,我只需创建真实的东西并填充测试数据.它使测试更具可读性和更快速,并且说实话,风险是不存在的.
| 归档时间: |
|
| 查看次数: |
16237 次 |
| 最近记录: |