Compartir a través de


Probar servicios Web

Actualización: noviembre 2007

Los servicios Web se pueden probar llamando a métodos Web desde pruebas unitarias. Probar servicios Web es muy similar a probar otros códigos mediante pruebas unitarias en las que se utilizan instrucciones Assert, y las pruebas generan la misma serie de resultados. Sin embargo, el espacio de nombres Microsoft.VisualStudio.TestTools.UnitTesting.Web de Visual Studio Team System Test proporciona atributos y métodos específicamente para probar servicios Web; éstos se describen en Probar un servicio Web localmente.

La lista siguiente describe dos maneras de probar servicios Web con pruebas unitarias:

  • El servicio Web se ejecuta en un servidor Web activo. No hay ningún requisito especial para probar un servicio Web que se ejecuta en un servidor Web local o remoto, como IIS. Para hacerlo, agregue una referencia Web y después, llame a métodos Web del servicio Web desde las pruebas unitarias, del mismo modo que éstas llamarían a los métodos de un programa que no fuese un servicio Web. Para obtener información acerca de cómo agregar una referencia Web, vea Agregar referencia Web (Cuadro de diálogo). Para obtener información acerca de cómo crear pruebas unitarias, vea Cómo: Generar una prueba unitaria y Cómo: Crear una prueba unitaria. Para obtener información acerca de cómo utilizar una prueba Web para probar un servicio Web, vea Cómo: Crear una prueba de servicios Web.

  • El servicio Web no está alojado en un servidor Web activo. Como se describe en Probar un servicio Web localmente, se puede probar un servicio Web que se ejecuta en un equipo local y no en un servidor Web, como IIS. Para ello, se utiliza un atributo que se proporciona en Herramientas para pruebas Team System para iniciar el servidor de desarrollo de ASP.NET. Esto crea un servidor temporal en el host local que aloja el servicio Web que se está probando. Para obtener más información acerca del servidor de desarrollo de ASP.NET, vea Servidores Web en Visual Web Developer.

Probar un servicio Web localmente

Este es el proceso para probar un servicio Web que se ejecuta en un equipo local pero no en IIS:

  1. Cree el servicio Web en el sistema de archivos local. Para obtener más información, vea Tutorial: Crear un servicio web utilizando Visual Basic o Visual C#.

  2. Genere pruebas unitarias para el servicio Web de la manera estándar. Para obtener más información, vea Cómo: Generar una prueba unitaria.

  3. Agregue el atributo AspNetDevelopmentServerAttribute a la prueba unitaria. Los argumentos para esta clase de atributo señalan al sitio del servicio Web y designan el servidor. Para obtener más información, vea Garantizar el acceso al servidor de desarrollo de ASP.NET.

  4. Dentro de la prueba unitaria, agregue una llamada al método TryUrlRedirection para que el objeto de servicio Web señale al servidor correcto. Compruebe que devuelve el valor True y utilice una instrucción Assert para hacer que la prueba genere un error si falla la redirección. Para obtener más información, vea Utilizar el método TryUrlRedirection.

  5. Llame al servicio Web o utilícelo de cualquier otra manera que estime necesaria para probarlo completamente. Para consultar un ejemplo de esto, vea Ejemplo de método de prueba de servicio Web.

Garantizar el acceso al servidor de desarrollo de ASP.NET

Si el sitio del servicio Web está en su sistema de archivos local, utiliza el servidor de desarrollo de ASP.NET y no es un sitio de IIS. En este caso, el proceso de generación de pruebas unitarias inicia un servidor de desarrollo de ASP.NET para el servicio Web y agrega una referencia Web al proyecto de prueba.

El servidor de desarrollo de ASP.NET es temporal, y la referencia Web fallaría cuando se hubiese detenido el servidor. Herramientas para pruebas Team System resuelve este problema proporcionando el atributo AspNetDevelopmentServer. Esta clase de atributo tiene dos constructores:

AspNetDevelopmentServerAttribute(string name, string pathToWebApp)
AspNetDevelopmentServerAttribute(string name, string pathToWebApp, string webAppRoot)

Los parámetros siguientes se utilizan con este atributo:

  • name es un nombre definido por el usuario que se asocia al servidor.

  • pathToWebApp es la ruta de acceso en el disco al sitio Web que se está probando.

  • webAppRoot es la ruta de acceso virtual en la que aparece el sitio en el servidor. Por ejemplo, si webAppRoot se establece en /WebSite1, la ruta de acceso al sitio es https://localhost:<puerto>/WebSite1 Para el primer constructor, el valor predeterminado es https://localhost:<puerto>/

Nota:

Los parámetros pathToWebApp y webAppRoot se utilizan de la misma forma con AspNetDevelopmentServerAttribute que con el atributo AspNetDevelopmentServerHost, que se usa para pruebas unitarias de ASP.NET.

Si se marca una prueba con el atributo AspNetDevelopmentServerAttribute, se inicia un servidor de desarrollo de ASP.NET siempre que se ejecute la prueba. Una entrada que contiene la dirección URL del sitio que se está probando se agrega a TestContext.Properties de la clase de prueba. La clave para esta entrada es AspNetDevelopmentServer.<nombre>, donde

<nombre> es el valor contenido en el argumento name del atributo. Este mecanismo garantiza que el servicio Web estará siempre disponible en un servidor de desarrollo de ASP.NET cuando se ejecute la prueba y que la dirección URL se conocerá en tiempo de ejecución.

Para probar un servicio Web de esta manera, puede generar pruebas unitarias, o puede escribir una prueba unitaria a mano y marcarla con este atributo. La creación manual requiere disponer de una referencia Web en contexto, para poder hacer referencia al tipo del servicio Web en el código de la prueba unitaria. Antes de agregar la referencia Web, debe iniciar un servidor de desarrollo de ASP.NET haciendo clic con el botón secundario en el proyecto de servicio Web y seleccionando Ver en el explorador.

Utilizar el método TryUrlRedirection

Cuando disponga de una referencia Web, puede crear una instancia del objeto de servicio Web en el código de prueba, pero podría fallar en tiempo de ejecución en caso de que la referencia señalase a la dirección URL de una instancia del servidor de desarrollo de ASP.NET que ya no estuviese en ejecución. Para resolver este problema, use el método TryUrlRedirection para modificar el objeto de servicio Web de modo que señale al servidor de desarrollo de ASP.NET que se inició específicamente para la prueba unitaria en ejecución.

TryUrlRedirection es un método estático de la clase WebServiceHelper que devuelve un valor booleano que indica si se ha podido efectuar la redirección.

bool TryUrlRedirection(System.Web.Protocols.WebClientProtocol client, TestContext context, string identifier)

TryUrlRedirection toma tres argumentos:

  • client es el objeto de servicio Web que se va a redirigir.

  • context es el objeto TestContext para la clase.

  • identifier es el nombre definido por el usuario para el servidor al que se redirige el objeto de servicio Web.

Después de llamar a este método, si se efectúa correctamente, puede llamar a métodos Web en el objeto de servicio Web. De esta manera, se tiene acceso al servicio Web a través del servidor de desarrollo de ASP.NET que se inició cuando se inició la prueba unitaria. Puede utilizar varios atributos AspNetDevelopmentServer en una sola prueba unitaria para iniciar varios servidores, con tal de que les dé nombres diferentes.

La generación de la prueba unitaria no agrega automáticamente el atributo AspNetDevelopmentServer o la llamada al método TryUrlRedirection. Estas entidades debe agregarlas. Tanto el atributo como el método están en Microsoft.VisualStudio.TestTools.UnitTesting.Web. Por tanto, es probable que necesite una instrucción using o Imports, como se muestra en el ejemplo siguiente.

Ejemplo de método de prueba de servicio Web

Este es un método de prueba sencillo para probar el método Web HelloWorld() de un servicio Web:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Web;
using TestProject1.localhost;

[TestMethod]
[AspNetDevelopmentServer("HelloWorldServer", @"C:\Documents and Settings\user\My Documents\Visual Studio 2005\WebSites\WebSite1")]
public void HelloWorldTest()
{
     HelloWorldService target = new HelloWorldService();

     Assert.IsTrue( WebServiceHelper.TryUrlRedirection
                         (
                          target,
                          testContextInstance,
                          "HelloWorldServer"
                         ),
                   "Web service redirection failed."
                   );

     string expected = "Hello World";
     string actual;

     actual = target.HelloWorld();

     Assert.AreEqual(
                     expected,
                     actual,
                     "TestProject1.localhost.HelloWorldService.HelloWorld did not return the expected value."
                     );
}

Vea también

Tareas

Cómo: Crear una prueba unitaria

Cómo: Parametrizar un servidor web

Conceptos

Servidores Web en Visual Web Developer

Referencia

Microsoft.VisualStudio.TestTools.UnitTesting.Web

AspNetDevelopmentServerAttribute

TryUrlRedirection

Otros recursos

Cómo: Generar una prueba unitaria