TransactionScope вызывает исключение TransactionManagerCommunicationException при использовании для модульных тестов БД

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

После некоторых исследований я придумал подход использования TransactionScope в моем тестовом проекте Visual Studio 2010, например

using( new TransactionScope())
{
    using( SqlConnection connection = new SqlConnection("someConnectionString"))
    {
        connection.Open();
        using( SqlCommand command = new SqlCommand( "some sql", connection ))
        {
            // Do some database stuff...
        }
     }
}

. Теперь это работает нормально, если я помещаю все это в один метод тестирования, т.е. все мои изменения в базе данных автоматически откатываются, когда блок using для TransactionScope завершен.

Моя проблема теперь в том, что я хотел бы сделать некоторые вещи базы данных в ClassInitialize, поэтому мне нужно сделать это только один раз для каждого тестового класса и не для каждого метода тестирования. Когда я создаю общедоступное свойство TransactionScope и назначаю ему экземпляр TransactionScope в методе ClassInitialize, это работает нормально. Как только я выполняю какие-либо действия, связанные с базой данных, в одном из моих тестовых методов, я сталкиваюсь с TransactionManagerCommunicationException в этом методе.

Я не совсем понимаю, почему это так, и я также хотел бы знать, есть ли - это ошибка в моем подходе или в том, как я могу заставить его работать без необходимости снова настраивать TransactionScope, включая все настройки для тестов в каждом методе тестирования. Доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен. Включите DTC для доступа к сети в конфигурации безопасности для MSDTC с помощью инструмента администрирования служб компонентов.


Я понимаю, что могу попробовать изменить настройки, но не понимаю, почему я получаю исключение для начала - в чем отличие по сравнению с приведенным выше кодом в одном (тестовом) методе?

Заранее спасибо и

с уважением

G.

5
задан Gorgsenegger 19 January 2011 в 12:34
поделиться