我是單元測試新手,希望得到一些幫助。我首先使用存儲庫模式使用代碼。我有一個包含所謂的通用信息庫通用CRUD操作的通用存儲庫(見一擊)使用Moq和庫模式進行單元測試
public abstract class GenericRepository<T> where T : class
{
private HolidayDatabaseContext _dataContext;
private readonly IDbSet<T> _dbset;
protected GenericRepository(IDbFactory databaseFactory)
{
DatabaseFactory = databaseFactory;
_dbset = DataContext.Set<T>();
}
protected IDbFactory DatabaseFactory
{
get;
private set;
}
protected HolidayDatabaseContext DataContext
{
get { return _dataContext ?? (_dataContext = DatabaseFactory.Get()); }
}
public virtual void Add(T entity)
{
_dbset.Add(entity);
}
public virtual void Update(T entity)
{
_dataContext.Entry(entity).State = EntityState.Modified;
}
public virtual void Delete(T entity)
{
_dbset.Remove(entity);
}
public virtual IEnumerable<T> Enumerable()
{
return _dbset.AsEnumerable<T>();
}
public virtual IQueryable<T> List()
{
return _dbset.AsQueryable<T>();
}
public virtual T GetSingleById(int id)
{
return _dbset.Find(id);
}
public void Save()
{
_dataContext.SaveChanges();
}
}
然後我繼承了它進入用戶系統信息庫,並創造了一些具體的方法。見下文
public class UserRepository : GenericRepository<User>, IUserRepository
{
public UserRepository(IDbFactory databaseFactory)
: base(databaseFactory) { }
public int HolidayEntitlement(int userId)
{
return HolidayEntitlement(userId, DateTime.Now);
}
public int HolidayEntitlement(int userId, DateTime dateTime)
{
//Get the User
var user = this.GetSingleById(userId);
//Work Total Entitlement
int entitlement = user.BaseHolidayEntitlement;
//Years in Service
entitlement += (dateTime - user.EmploymentStartDate).Days/365;
return entitlement;
}
public int RemainingHolidayEntitlement(int userId)
{
return RemainingHolidayEntitlement(userId, DateTime.Now);
}
public int RemainingHolidayEntitlement(int userId, DateTime dateTime)
{
return int.MinValue;
}
}
我想單元測試HolidayEntitlement(INT用戶id,日期時間日期時間),但我需要在
我寫了這個作爲測試的方法來嘲笑GetSingleById一部分,但它不編譯。
[TestMethod]
public void GetHolidayEntitlement25()
{
//How to write this Unit test
//Setup
var user = new User { AnnualHolidayIncrement = 1, BaseHolidayEntitlement = 25, EmploymentStartDate = new DateTime(2013, 1, 1),Id=1 };
Mock<UserRepository> mock = new Mock<UserRepository>();
mock.Setup(m => m.GetSingleById(1)).Returns(user);
Assert.AreEqual(25, mock.Object.HolidayEntitlement(1));
}
任何幫助,將不勝感激
謝謝你的快速反應,我的意思說的是,我的通用信息庫處理CRUD操作。然後我爲每個從generic繼承的實體定製了Repositories。我想我在這裏犯的錯誤是將「假日權利」方法放入存儲庫中。它應該在邏輯層,謝謝你指出我正確的方向,我將分裂出來,並嘗試再次創建單元測試。 –
@MikeRoss - 是的,很容易犯錯,但我很高興看到你編寫單元測試。它們可以幫助你儘早拿起這些東西。他們確保你把東西放在正確的地方,因爲如果你不能嘲笑,那麼你知道有什麼不對。保持良好的做法! – Belogix
@丹尼爾 - 原來的問題是「我想單元測試HolidayEntitlement ...」,這並不意味着「我如何測試CRUD」。這可能是**你的**問題,在這種情況下,我會建議提出你自己的問題,並明確地詢問你想知道的內容。 – Belogix