Pregunta

Estoy intentando realizar algunas pruebas web automatizadas de mi aplicación ASP.NET. Esperaba usar el atributo AutoRollback de las extensiones de Xunit.net para deshacer los cambios en la base de datos que se realizaron durante la prueba. AutoRollback utiliza TransactionScope para iniciar una transacción antes de la prueba y revertirla después.

Cuando intento golpear mi aplicación web durante una transacción, siempre se agota. Parece que esto debería funcionar, ¿alguna idea? Aquí está mi prueba:

[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"));
}
¿Fue útil?

Solución

Su aplicación ASP.NET tiene un contexto de base de datos independiente y no tiene idea de que desea que se una a la transacción iniciada por Xunit.net. Aparentemente, la base de datos bloquea algunos recursos cuando se inicia la transacción; La aplicación web espera pacientemente durante algún tiempo y, finalmente, se da por vencida.

Creo que lo mejor es comenzar desde una base de datos vacía y usar un script SQL para crear un esquema y rellenar las tablas de búsqueda (su base de datos es bajo control de fuente , ¿verdad?). Otro enfoque es hacer una copia de seguridad de la base de datos antes de ejecutar las pruebas y luego restaurarla una vez que terminen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top