私はNHibernateを使用しており、すべての基底NHibernateRepositoryクラスから継承する多くのリポジトリを持っています。ここに私のリポジトリの1つである:構造マップを使用して基本クラスをモックする方法は?
public class StaffRepository : NHibernateRepository<IStaff>,
{
public IEnumerable<IStaff> GetBySiteRegionAndMonth(int siteId, int regionId, DateTime firstOfMonth)
{
return Repository.Where(ab => ab.SiteId == siteId && ab.WorkDate >= firstOfMonth && ab.WorkDate < firstOfMonth.AddMonths(1));
}
}
とベースクラス:
public class NHibernateRepository<TEntity> : IRepository<TEntity> where TEntity : IEntity
{
protected ISession session;
public NHibernateRepository()
{
this.session = new SessionCache().GetSession();
}
public IQueryable<TEntity> Query
{
get
{
return session.Query<TEntity>();
}
}
// Add
public void Add(TEntity entity)
{
session.Save(entity);
}
// GetById
public TEntity GetById(int id)
{
// return session.Load<TEntity>(id);
return this.Query.SingleOrDefault(e => e.Id == id);
}
}
私は今、本当のデータベースにアクセスしませんテストクラスを使用して、基本クラスNHibernateRepository
にモックしようとしています、代わりに静的リストを使用します。ここではテストクラスの私の登録が私の構造マップコンテナである:
x.For(typeof(IRepository<>)).Use(typeof(TestNHibernateRepository<>));
私の問題は、実際のNHibernateRepository
はまだテストで使用されていること、です。
x.For<IStaffRepository>().Singleton().Use<StaffRepository>();
すべて私の他のテストクラスが罰金を注入されているが、私はそれが継承されたクラスであるとして、これは問題にされていると思う:私は私の登録につきとして本当のStaffRepository
を使用しています。
NHibernateRepository
ではなく、私のStaffRepositoryがTestNHibernateRepository
を使用していることを確認するにはどうすればよいですか?