Свободные модульные тесты NHibernate - PullRequest
0 голосов
/ 25 октября 2010

Допустим, я написал собственного провайдера членства, который расширяет System.Web.Security.MempershipProvider. Это находится в своем собственном проекте.

переопределение метода ValidateUser выглядит следующим образом:

IList<User> Users;
        using (ISession sess = NHibernateHelper.GetCurrentSession())
        {
            Users = sess.CreateQuery("select u from User as u where u.Username = :username and u.Password = :password")
                .SetParameter("username", username)
                .SetParameter("password", password)
                .List<User>();
        }
        if (Users.Count > 0)
        {
            return true;
        }
        else
        {
            return false;
        }

Здесь я использую свободный nhibernate, поэтому класс NHibernateHelper имеет дело с конфигурацией объекта ISession.

Я хочу протестировать этот метод с использованием NUnit. Как заставить метод использовать другую конфигурацию базы данных (например, базу данных SQLite в памяти) при выполнении теста?

1 Ответ

1 голос
/ 29 октября 2010

Сделайте сеанс изменяемым.

Обычно я бы сказал, внедрение конструктора зависимости, но вы не можете сделать это с поставщиками членства (я думаю).

Итак, как насчет свойства, которое вы можетепереопределить, что-то вроде этого

public MembershipProvider()
{
  SessionProvider  = new DefaultSessionProvider();
}

public ISessionProvicer SessionProvider {get;set;}
...
IList<User> Users;
        using (ISession sess = SessionProvider .GetSession())

Затем вы можете переопределить ISessionProvider в своих модульных тестах.

Возможно, лучшей идеей будет изолировать часть, которую вы хотите выполнить модульным тестом, от проверяющего членства.Скажем, класс с именем UserLoginValidationService.

Вот еще несколько примеров использования Fluent NHibernate и баз данных в памяти: Fluent NHibernate getchas при тестировании с базой данных в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...