Sono un nuovo test dell'unità e vorrei un aiuto. Sto usando il codice prima con pattern di repository. Ho un repository generico che contiene operazioni CRUD generico chiamato Repository Generico (vedi colpo)Test unitario con moq e modello di deposito
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();
}
}
ho poi ereditato in un'User Repository e ha creato alcuni metodi specifici. vedi sotto
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;
}
}
Vorrei test unità HolidayEntitlement (int userId, DateTime DateTime), ma ho bisogno di prendere in giro la parte GetSingleById nel metodo
Ho scritto questo come un test, ma non è così compilare.
[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));
}
Qualsiasi aiuto sarebbe apprezzato
Grazie per la rapida risposta, quello che volevo dire è che il mio repository generico gestisce le operazioni CRUD . e poi ho creato dei repository personalizzati per ciascuna delle mie entità che ereditano dal generico. Immagino che l'errore che ho fatto qui stia mettendo il metodo "Holiday Holiday" nel repository. Dovrebbe essere in uno strato logico, grazie per avermi indicato nella giusta direzione, l'ho diviso e ho provato a creare di nuovo il test dell'unità. –
@MikeRoss - Sì, gli errori sono facili da fare, ma sono lieto di vederti scrivere test unitari. Ti aiutano a raccogliere queste cose presto. Si assicurano che stai mettendo le cose nel posto giusto, perché se non puoi prendere in giro allora sai che qualcosa non va. Continuate le buone pratiche! – Belogix
@Daniel - La domanda originale era "Vorrei testare l'unità HolidayEntitlement ..." che non significa "Come faccio a testare CRUD". Potrebbe essere la ** TUA domanda, nel qual caso consiglierei di sollevare la tua domanda e chiedere esplicitamente cosa vorresti sapere. – Belogix