Насмешка NHibernate ISession с Moq

Ну, около порта Windows GNU grep в:

http://gnuwin32.sourceforge.net/

существует также grep Borland (очень похожий на GNU один) доступный в бесплатном программном обеспечении Бесплатный Компилятор C++ Borland (это - бесплатное программное обеспечение с инструментами командной строки).

25
задан JP. 2 December 2009 в 01:58
поделиться

2 ответа

Ниже приведено решение, которое я придумал, и оно работает идеально. Опять же, я не тестирую NHibernate и не тестирую базу данных - я просто хочу протестировать контроллеры, которые зависят от NHibernate. Проблема с первоначальным решением, похоже, заключается в том, что я вызывал метод, а также читал член списка сеанса в вызове настройки MOQ. Я разбил эти вызовы, разбив решение на QueryMock и Session Mock (запрос на создание возвращает объект IQuery). Также был необходим макет транзакции, поскольку это зависимость (в моем случае) от сеанса ...

        [Test]
        public void DummyTest()
        {
            var userList = new List<User>() { new User() { ID = 2, FirstName = "John", LastName = "Peterson" } };
            var sessionMock = new Mock<ISession>();
            var queryMock = new Mock<IQuery>();
            var transactionMock = new Mock<ITransaction>();

            sessionMock.SetupGet(x => x.Transaction).Returns(transactionMock.Object);
            sessionMock.Setup(session => session.CreateQuery("from User")).Returns(queryMock.Object);
            queryMock.Setup(x => x.List<User>()).Returns(userList);

            var controller = new UsersController(sessionMock.Object);
            var result = controller.Index() as ViewResult;
            Assert.IsNotNull(result.ViewData);
        }
22
ответ дан 28 November 2019 в 21:15
поделиться

Вместо того, чтобы издеваться над сеансом , можно было бы подумать о настройке другой конфигурации для модульных тестов. Эта конфигурация модульного тестирования использует быструю внутрипроцессную базу данных, такую ​​как SQLite или Firebird. При настройке прибора вы создаете новую тестовую базу данных полностью с нуля, запускаете сценарии для настройки таблиц и создаете набор начальных записей. В настройке для каждого теста вы открываете транзакцию, а при разрыве после тестирования вы откатываете транзакцию, чтобы восстановить базу данных в ее предыдущее состояние. В некотором смысле вы не издеваетесь над сеансом , потому что это становится сложно, но вы издеваетесь над самой базой данных.

18
ответ дан 28 November 2019 в 21:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: