Ian Cooper had some nice articles on how to do unit testing , i have implemented his code and ideas ( shown below) .
See Part 2 for some Business code
{
{
impl = source;
queryableImpl = impl.AsQueryable();
}
{
}
{
impl.Add(item);
queryableImpl = impl.AsQueryable();
}
{
}
#region
{
}
{
impl.Remove(item);
queryableImpl = impl.AsQueryable();
}
{
impl.RemoveAll(MatchWithContainer);
queryableImpl = impl.AsQueryable();
}
{
}
#endregion
#region
System.Collections.
{
}
#endregion
#region
{
}
{
}
{
}
#endregion
}
public interface IDataSource<T> : IQueryable<T>, IEnumerable<T>,ITable, IQueryProvider
{
}
{
}
public
{
}
interface IUnitOfWork<T> :IDisposableILINQDataSource<T> DataSource{ get; set; } //table// bool ReadOnly { get; set; }void SubmitChanges(); // only call for inserts OR when all work is done
{
{
unitOfWork = work;
}
{
#region
{
{
}
{
dataSource =
}
}
#region
public abstract class UnitOfWorkBase<T> : IUnitOfWork<T>ILINQDataSource<T> dataSource; IUnitofWork<T> Memberspublic ILINQDataSource<T> DataSourcegetreturn dataSource;setvalue ;abstract public bool ReadOnly { get; set; }abstract public void SubmitChanges();#endregion IDisposable Membersabstract public void Dispose();#endregion}public class RepositryBase<T> where T : classprotected IUnitOfWork<T> unitOfWork;public RepositryBase(IUnitOfWork<T> work) Guard.ArgumentNotNull(work, "work");//public IQueryable<T> T//{// get { return gameSettings; }// set { gameSettings = value; }//} }public interface ILINQDataSource<T> : IQueryable<T>, IEnumerable<T> void Add(T item);void Attach(T item);void Remove(T item);void RemoveAll(IEnumerable<T> items);
publicclassMemoryDataSource<T> : ILINQDataSource<T> List<T> impl;IQueryable<T> queryableImpl;public MemoryDataSource(List<T> source)public MemoryDataSource(): this(newList<T>())publicvoid Add(T item)//public IQueryable<S> CreateQuery<S>(Expression expression)//{// return queryableImpl..CreateQuery<S>(expression);//}IEnumerator<T> IEnumerable<T>.GetEnumerator()return impl.GetEnumerator(); ITable<T> Memberspublicvoid Attach(T item)return; publicvoid Remove(T item)publicvoid RemoveAll(IEnumerable<T> items)internalbool MatchWithContainer(T item)return impl.Contains(item); IEnumerable MembersIEnumerator System.Collections.IEnumerable.GetEnumerator()return impl.GetEnumerator(); IQueryable Memberspublic System.Type ElementTypeget { return queryableImpl.ElementType; }publicExpression Expressionget { return queryableImpl.Expression; }publicIQueryProvider Providerget { return queryableImpl.Provider; }
Print | posted on Thursday, January 15, 2009 12:25 AM