2009-06-16 4 views
6

Я пытаюсь выполнить автоматическое веб-тестирование моего приложения ASP.NET. Я надеялся использовать атрибут AutoRollback из расширений Xunit.net, чтобы отменить любые изменения базы данных, которые были сделаны во время теста. AutoRollback использует TransactionScope для начала транзакции перед тестом и откатывания назад.Можно ли использовать откат TransactionScope с селеном или ватином?

Когда я пытаюсь ударить свое веб-приложение во время транзакции, он всегда истекает. Кажется, это должно работать, какие-то идеи? Вот мой тест:

[Fact] 
[AutoRollback] 
public void Entity_should_be_in_list() 
{ 
    Entity e = new Entity 
    { 
     Name = "Test", 
    }; 
    dataContext.Entities.InsertOnSubmit(e); 
    dataContext.SubmitChanges(); 

    selenium.Open("http://localhost/MyApp"); 
    Assert.True(selenium.IsTextPresent("Test")); 
} 

ответ

5

Ваше приложение ASP.NET имеет отдельный контекст базы данных, и это не имеет ни малейшего представления о том, что вы хотите, чтобы присоединиться к транзакции, начатой ​​xUnit.NET. По-видимому, база данных блокирует некоторые ресурсы при запуске транзакции; веб-приложение терпеливо ждет какое-то время и, в конце концов, сдастся.

Я думаю, что лучше всего начать с пустой базы данных и использовать SQL-скрипт для создания схемы и заполнения таблиц поиска (ваша база данных under source control, правильно?). Другим подходом является резервное копирование базы данных перед запуском тестов, а затем восстановление после завершения.

+0

Знаете, это кажется настолько очевидным сейчас, что вы сказали это :) Я надеялся избежать наращивания и разрыва базы данных все время, но я думаю, что я застрял в этом. –

+0

Вам нужно найти способ включения поддержки транзакций в LINQ to SQL, чтобы он мог присоединиться к существующей области транзакций. –