我正在創建一個公開IQueryable的存儲庫。嘲笑我的單元測試的最好方法是什麼?我如何模擬IQueryable <T>
由於我使用RhinoMocks爲我的模擬對象的其餘部分,我試圖做到以下幾點:
IQueryable<MyObject> QueryObject =
MockRepository.GenerateStub<IQueryable<MyObject>>();
這不,雖然,所以我試着這樣做的工作:
IQueryable<MyObject> QueryObject =
(new List<MyObject> { new MyObject() }).AsQueryable();
有沒有更好的方法來做到這一點,或有任何其他模擬框架建立在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);
}
這裏是我要測試的方法:
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();
}
那麼這裏就是測試,因爲我有它現在將測試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);
}
該代碼取自我的AzureBlog項目。
你能粘貼你的測試嗎? – Grzenio 2010-02-11 14:43:26