Pruebas unitarias: interfaz de usuario ASP.NET

Llega el momento de ver lo que nos ofrece Visual Studio para hacer las pruebas sobre la capa de interfaz, en este caso sobre una interfaz ASP.NET.

Probar el 100% de la funcionalidad de la interfaz de usuario de manera automatizada es complicado con las herramientas que disponemos y siempre va a quedar una parte que obligatoriamente tendremos que cubrir con pruebas funcionales. Aún así, todo lo que podemos automatizar será tiempo que nos ahorraremos.

En este tipo de pruebas sigo un enfoque de pruebas de cobertura.

Una prueba unitaria de cobertura es aquella cuyo único objetivo es cubrir la mayor parte posible de código, sin realmente comprobar si el resultado de la prueba es el esperado. Este tipo de pruebas nos protegen contra errores graves, como excepciones inesperadas en el código.

Aunque siempre que sea posible es conveniente realizar pruebas de funcionalidad (comprueba que realmente hace lo que tiene que hacer) en algunos escenarios, como el que nos ocupa podemos usar este enfoque de cobertura.

Visual Studio nos permite grabar secuencia completas contra la interfaz de usuario, con el objetivo de poder repetirlas tantas veces como queremos. Este tipo de pruebas las podemos crear desde el menú de “Test”, creando una prueba de tipo Web.

image

image

Una vez terminada la grabación dispondremos de las secuencias grabadas para poder repetirlas tantas veces como queremos.

Desde el menú horizontal que se muestra en la imagen Visual Studio nos permite extender la funcionalidad de la prueba que acabamos de grabar; asociarle un datasource, añadir más grabaciones, convertir la prueba en código etc…

image

Una de las propiedades que nos interesa establecer es que cuando se inicie la prueba se arranque la aplicación ASP.NET para que la prueba pueda realizarse. Sino realizamos este paso la prueba fallará porque no encontrará la aplicación que queremos probar.

Desde una de las opciones de menú horizontal (Parametrizar servidor Web ) podemos indicarle que queremos que se arranque un servidor web de desarrollo cuando ejecutemos la prueba.

image

 

 

También desde el mismo menú podremos convertir la grabación que hemos realizar el código, para tener algo similar al código que aparece a continuación. En algunas ocasiones nos puede interesar tener la prueba en código para poder personalizarla según nuestras necesidades, por ejemplo, para hacer algún cambio respecto lo grabado.

        [TestMethod]
        [UrlToTest("http://localhost:20970/Default.aspx")]
        [AspNetDevelopmentServerHost("%PathToWebRoot%\UTDemo\UTDemo", "/")]
        public override IEnumerator<WebTestRequest> GetRequestEnumerator()
        {
            // Initialize validation rules that apply to all requests in the WebTest
            if ((this.Context.ValidationLevel >= Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.Low))
            {
                ValidateResponseUrl validationRule1 = new ValidateResponseUrl();
                this.ValidateResponse += new EventHandler<ValidationEventArgs>(validationRule1.Validate);
            }

            WebTestRequest request1 = new WebTestRequest("http://localhost:20970/Default.aspx");
            request1.ThinkTime = 5;
            ExtractHiddenFields extractionRule1 = new ExtractHiddenFields();
            extractionRule1.Required = true;
            extractionRule1.HtmlDecode = true;
            extractionRule1.ContextParameterName = "1";
            request1.ExtractValues += new EventHandler<ExtractionEventArgs>(extractionRule1.Extract);
            yield return request1;
            request1 = null;

            ........
            ........
 
Fijaros en los atributos UrlToTest y AspNetDevelopmentServerHost. A través de estos dos atributos se consigue que cuando ejecutemos la prueba se arranque un servidor web de desarrollo con la aplicación web a probar.
 
Del mismo modo también, desde el menú horizontal, podríamos configurar una origen de datos para la prueba web, para que ciertos valores de la misma se carguen desde un origen externo a la prueba.
 
Por ejemplo, si tenemos un formulario de alta, cuando hemos grabado la prueba habremos metido ciertos valores, que son los que se han grabado. Nos puede interesar repetir la secuencia grabada pero que los datos utilizados no sean los mismos. En este caso podremos usar el origen de datos para que almacene los diferentes datos que queremos usar en la prueba.

image

 

 

Y para los que estéis pensando si existe algo parecido para interfaces WinForm, la respuesta es no, al menos hasta la salida de Visual Studio 2010.

Para los que necesitéis probar aplicaciones WinForm y no podáis esperar, os recomiendo este post de Rodrigo Corral.

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

8 comentarios en “Pruebas unitarias: interfaz de usuario ASP.NET”

  1. Quizás sería interesante explorar otras alternativas como WatIN con su respectivo recorder. Mucho más flexibles y fiables ya que interacciona directamente con el Internet Explorer a través de COM y es como si lo escribieses tu directamente.

    cierto que el resto de cosas las tienes que hacer a mano, como los despliegues o levantar los servidores CASINI.

    Además, puedes bajarte el código fuente del framework y retocarlo si tu proyecto necesita más cosillas que testear.

  2. La verdad que no conozco WatIN pero habrá que echarle un ojo.

    No te diré que el recorder que TS es bastante puñetero a veces pero complicado que no lo sean todos los recorders.

    Tb ten en cuenta que lo que grabas lo puedes pasar a código y ahí personalizar y cambiar todo lo que quieras. Para algunas situaciones es la única alternativa que queda.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *