比方說,我有沿着以下線通用倉庫等級:(?或者即使)我有麻煩纏繞我的腦海裏圍繞如何單元測試與泛型參數存儲庫
public class Repository<T> : IRepository<T> where T : class
{
IObjectSet<T> source;
public Repository(IUnitOfWork transactionHandler)
{
source = transactionHandler.CreateObjectSet<T>();
}
public IQueryable<T> GetAll()
{
return source.AsQueryable<T>();
}
public void Add(T entity)
{
source.AddObject(entity);
}
//blah blah other methods
}
我會單元測試這個。 ,Visual Studio生成的測試組合,我可以理解爲上述實施GETALL
public void GetAllTest()
{
GetAllTestHelper<SomeExpectedType>();//expect this to pass
try
{
GetAllTestHelper<SomeUnexpectedType>();//expect this to throw exception
}
//catch exception - check it is expected type etc.
}
public void GetAllTestHelper<T>() where T : class
{
IUnitOfWork transactionHandler = IUnitOfWorkFactory.GetUnitOfWork();
Repository<T> target = new Repository<T>(transactionHandler);
IQueryable<T> actual = target.GetAll();
Assert.IsInstanceOfType(actual, typeof(IQueryable<T>));
}
的想法是 - 我可以證明,調用這個方法返回一個類型T的一個IQueryable我也可以證明它拋出對於無法爲其生成IObjectSet的類型(也是必需的/期望的)的InvalidOperationException。
對於Add方法,我將圍繞圓圈進行。
對於'爲什麼' - 爲什麼要進行測試 - 我想我想證明我可以將一種類型的T添加到存儲庫,然後證明它已被添加到數據庫中。
對於「如何」 - 使用默認VS如上,我相處的
public void AddTest()
{
AddTestHelper<SomeExpectedType>();
}
public void AddTestHelper<T>() where T : class
{
IUnitOfWork transactionHandler = UnitTestHelper.GetUnitOfWork();
Repository<T> target = new Repository<T>(transactionHandler);
T entity = default(T);
target.Add(entity);//throws exception - value cannot be null
}
所以我的問題是 線東西)你會如何單元測試這個庫? 或可能的 b)會你測試這個存儲庫?