Я пытаюсь узнать, как издеваться над моим общим хранилищем, чтобы я мог тестировать все свои службы.NHibernate Unit Testing Mocking/In Memory Database
Im используя NHibernate Свободный доступ для обработки данных и Ninject для зависимости (я не заинтересован в тестировании этого)
Мой репозиторий интерфейс выглядит как:
public interface IRepository<TEntity> where TEntity : class
{
IQueryable<TEntity> GetAll();
TEntity Get(int key);
void Insert(TEntity entity);
void Update(TEntity entity);
void Delete(int id);
}
И фактическое хранилище выглядит как :
public class GenerRepository<TEntity> : IRepository<TEntity>where TEntity : Entity
{
protected ISession Session{get { return NHibernateHelper.OpenSession(); }}
public IQueryable<TEntity> GetAll(){return Session.Query<TEntity>();}
public TEntity Get(int key){return Session.Get<TEntity>(key);}
public void Insert(TEntity entity){Session.Save(entity);}
public void Update(TEntity entity){Session.Update(entity);}
public void Delete(int id){Session.Delete(Session.Load<TEntity>(id));}
}
Все мои услуги выполняют следующие действия: создайте репозиторий и используйте его.
Я читал так много статей о том, как это сделать, но ни один из них не прост или не объяснен. Поэтому любые советы между созданием тестового универсального репозитория или даже издевательством над ним. Мне также было бы интересно создать базу данных в памяти, но как мне настроить конфигурацию для свободного nhibernate в моем тестовом проекте без редактирования кода в моем реальном проекте?
Возможно ли, чтобы общий репозиторий попал в список Tentity, а не в базу данных или в базу данных памяти.
Спасибо за чтение и с нетерпением ждем совета.
Это возможно. Если вы пойдете этим путем, имейте в виду, что поставщик LINQ более ограничен, чем объекты LINQ 2, что означает, что вы можете завершить тестирование вашего модуля с «List», а приложение сбой при запросе на базу данных. –
Ahh спасибо за это, Так как бы вы посоветовали мне проверить это? Можете ли вы привести мне пример? – LmC
Может быть, это против «чистоты» модульного тестирования (поскольку он переходит на территорию простых тестов интеграции), но я обычно использую [базу данных SQLite в памяти] (http: // ayende.ком/блог/3983/NHibernate-модульное тестирование). С последними версиями NHibernate и драйверами у меня не было ни одного запроса NHibernate LINQ, который завершился бы неудачей на SQLite (при работе на SQL Server). –