Я хотел бы запустить несколько тестов хранимых процедур в моей базе данных, фактически не влияя на данные (или, точнее говоря, без длительного воздействия после запуска теста).
После некоторых исследований я придумал подход использования 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.