Can TransactionScope rollback ser usado com selênio ou Watin?
Pergunta
Eu estou tentando fazer alguns testes web automatizado da minha aplicação ASP.NET. Eu estava esperando para usar o atributo AutoRollback de extensões xUnit.net para desfazer as alterações de banco de dados que foram feitas durante o teste. AutoRollback usa TransactionScope para iniciar uma transação antes do teste e enrolá-lo de volta depois.
Quando eu tentar acertar minha aplicação web durante uma transação, ele sempre tempo limite. Parece que isso deve funcionar, todas as idéias? Aqui está o meu teste:
[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"));
}
Solução
O aplicativo ASP.NET tem um contexto banco de dados separado e não tem idéia de que você quer que ele se juntar a transação iniciada por Xunit.net. Aparentemente, o banco de dados bloqueia alguns recursos quando a transação começa; aplicação web espera pacientemente por algum tempo e finalmente desiste.
Eu acho que sua melhor aposta é começar a partir do banco de dados vazio e script SQL uso para criar esquema e preencher lookup tabelas (seu banco de dados é sob controle de origem , certo?). Outra abordagem é a base de dados de backup antes de executar os testes e depois restaurá-lo uma vez que terminar.