我是单元测试新手,希望得到一些帮助。我首先使用存储库模式使用代码。我有一个包含所谓的通用信息库通用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