Ich bin neu in der Unit-Tests und ich möchte etwas Hilfe. Ich verwende Code zuerst mit Repository-Muster. Ich habe eine generische Repository, das generische Repository (siehe Schlag) generic CRUD Betrieb enthält genanntUnit-Test mit Moq und Repository-Muster
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();
}
}
Ich habe dann in einem User-Repository geerbt und einige spezifische Methoden erstellt. siehe unten
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;
}
}
Ich mag würde Test HolidayEntitlement zu Unit (int userId, Datetime Datetime), aber ich brauche das GetSingleById Teil in der Methode zu verspotten
ich dies als Test geschrieben haben, aber es funktioniert nicht kompilieren.
[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));
}
Jede Hilfe wäre
Dank für die schnelle Antwort danken, was bedeutete, dass ich zu sagen ist, dass mein Allgemein Repository verwaltet die CRUD-Operationen . und dann habe ich maßgeschneiderte Repositories für jede meiner Entitäten, die von generischen erbt. Ich schätze, der Fehler, den ich hier gemacht habe, ist die "Holiday Entitlement" -Methode in das Repository zu setzen. Es sollte in einer logischen Schicht sein, danke, dass Sie mich in die richtige Richtung weisen, ich werde dies aufteilen und versuchen, den Komponententest erneut zu erstellen. –
@MikeRoss - Ja, Fehler sind einfach zu machen, aber ich freue mich, dass Sie Unit-Tests schreiben. Sie helfen Ihnen, diese Dinge früh aufzugreifen. Sie stellen sicher, dass du die Dinge an die richtige Stelle legst, denn wenn du dich nicht verspotten kannst, dann weißt du, dass etwas nicht stimmt. Mach weiter so! – Belogix
@Daniel - Die ursprüngliche Frage lautete: "Ich möchte Unit Test HolidayEntitlement testen ...", was nicht bedeutet "Wie teste ich CRUD?". Das könnte Ihre ** Frage sein. In diesem Fall würde ich Ihnen raten, Ihre eigene Frage zu stellen und explizit zu fragen, was Sie gerne wissen möchten. – Belogix