Hello,
This is actually a great question! FakeObjectSet is not a class included in the framework but just a placeholder name for any fake implementation of the IObjectSet interface. I can share with you right now a very simple version that we often use to implement fake ObjectContext classes for unit tests:
This is actually a great question! FakeObjectSet
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Objects;
using System.Linq;
using System.Linq.Expressions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Testing
{
class FakeObjectSet : IObjectSet where TEntity : class
{
HashSet _data;
IQueryable _query;
public FakeObjectSet() : this(new List()) { }
public FakeObjectSet(IEnumerable testData)
{
_data = new HashSet(testData);
_query = _data.AsQueryable();
}
public void AddObject(TEntity item)
{
_data.Add(item);
}
public void DeleteObject(TEntity item)
{
_data.Remove(item);
}
public void Attach(TEntity item)
{
_data.Add(item);
}
IEnumerator IEnumerable.GetEnumerator()
{
return _data.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _data.GetEnumerator();
}
Type IQueryable.ElementType
{
get { return _query.ElementType; }
}
Expression IQueryable.Expression
{
get { return _query.Expression; }
}
IQueryProvider IQueryable.Provider
{
get { return _query.Provider; }
}
}
}
You will find a brief sample on how to use this in the Sneak Peak blog post I wrote about Testability Improvements in EF 4, here.
Hope this helps
Комментариев нет:
Отправить комментарий