Test di servizi Web

È possibile verificare i servizi Web chiamando i metodi Web dagli unit test. La verifica dei servizi Web è analoga alla verifica di altri codici, mediante l'utilizzo di unit test che permettono l'uso di istruzioni Assert, e il test produce lo stesso intervallo di risultati. Tuttavia, lo spazio dei nomi Microsoft.VisualStudio.TestTools.UnitTesting.Web di Team Edition for Testers fornisce gli attributi e i metodi specifici per verificare i servizi Web, descritti nella sezione Verifica locale di un servizio Web.

Nell'elenco riportato di seguito vengono descritti due modi per verificare i servizi Web con gli unit test.

  • Il servizio Web viene eseguito su un server Web attivo. Non vi sono requisiti speciali per verificare un servizio Web che viene eseguito su un server Web locale o remoto, come IIS. A questo scopo, aggiungere un riferimento Web e chiamare i metodi Web del servizio Web dagli unit test, come verrebbero chiamati i metodi di un programma che non è un servizio Web. Per ulteriori informazioni su come aggiungere un riferimento Web, vedere Finestra di dialogo Aggiungi riferimento Web. Per ulteriori informazioni sulla creazione di unit test, vedere Procedura: generare unit test e Procedura: modificare unit test. Per informazioni sull'utilizzo di un test Web per verificare un servizio Web, vedere Procedura: creare un test di servizio Web.

  • Il servizio Web non è ospitato su un server Web attivo. Come descritto nella sezione Verifica locale di un servizio Web, è possibile verificare un servizio Web eseguito in un computer locale e non in un server Web, come IIS. A questo scopo, utilizzare un attributo fornito da Strumenti di test Team System per avviare il server di sviluppo ASP.NET. Viene creato un server temporaneo sull'host locale che ospita il servizio Web che si sta verificando. Per ulteriori informazioni sul server di sviluppo ASP.NET, vedere Server Web in Visual Web Developer.

Verifica locale di un servizio Web

Si tratta del processo di verifica di un servizio Web eseguito su un computer locale ma non in IIS.

  1. Creare il servizio Web sul file system locale. Per ulteriori informazioni, vedere Procedura dettagliata: creazione di un servizio Web XML mediante Visual Basic o Visual C#.

  2. Generare gli unit test sulla base del servizio Web, seguendo il metodo standard di generazione degli unit test. Per ulteriori informazioni, vedere Procedura: generare unit test.

  3. Aggiungere allo unit test l'attributo AspNetDevelopmentServerAttribute. Gli argomenti di questa classe di attributi fanno riferimento al sito del servizio Web e al nome del server. Per ulteriori informazioni, vedere Verifica dell'accesso al server di sviluppo ASP.NET.

  4. Nello unit test aggiungere una chiamata al metodo TryUrlRedirection per indirizzare l'oggetto servizio Web al server corretto. Verificare che venga restituito il valore true e utilizzare l'istruzione Assert per annullare il test se il reindirizzamento non ha esito positivo. Per ulteriori informazioni, vedere Utilizzo del metodo TryUrlRedirection.

  5. Chiamare il servizio Web o eseguire altri tipi di verifica se si ritiene necessario testare il servizio Web in modo approfondito. Per un esempio, vedere Esempio di metodo di test di un servizio Web.

Verifica dell'accesso al server di sviluppo ASP.NET

Se il sito del servizio Web risiede nel file system locale, esso utilizza il server di sviluppo ASP.NET e non è un sito IIS. In questo caso, il processo di generazione degli unit test avvia un server di sviluppo ASP.NET per il servizio Web e aggiunge un riferimento Web al progetto di test.

Il server di sviluppo ASP.NET è temporaneo e il riferimento Web avrebbe esito negativo dopo l'interruzione del server. In Strumenti di test Team System il problema viene risolto tramite l'attributo AspNetDevelopmentServer. Questa classe di attributi dispone di due costruttori:

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

Con questo attributo vengono utilizzati i seguenti parametri:

  • name è un nome definito dall'utente che viene associato al server.

  • pathToWebApp è il percorso su disco del sito Web in fase di verifica.

  • webAppRoot è il percorso virtuale con il quale viene visualizzato il sito sul server. Ad esempio, se il parametro webAppRoot viene impostato su /WebSite1, il percorso del sito sarà https://localhost:<port>/WebSite1. Per il primo costruttore l'impostazione predefinita è https://localhost:<port>/.

Nota

I parametri pathToWebApp e webAppRoot vengono utilizzati con AspNetDevelopmentServerAttribute allo stesso modo come per l'attributo AspNetDevelopmentServerHost, il quale viene utilizzato per gli unit test di ASP.NET.

Quando si contrassegna un test con l'attributo AspNetDevelopmentServerAttribute, viene avviato un server di sviluppo ASP.NET ad ogni esecuzione del test. A TestContext.Properties della classe di test viene aggiunta una voce che contiene l'URL del sito in fase di verifica. La chiave di questa voce è AspNetDevelopmentServer.<name>, dove

<name> è il valore contenuto nell'argomento name dell'attributo. Questo meccanismo garantisce che il servizio Web sia sempre disponibile in un server di sviluppo ASP.NET quando il test viene eseguito e che l'URL sia noto in fase di esecuzione.

Per verificare un servizio Web in questo modo, è possibile generare degli unit test oppure creare manualmente uno unit test e contrassegnarlo con questo attributo. Per la creazione manuale è necessaria la presenza di un riferimento Web che permetta di fare riferimento al tipo di servizio Web nel codice dello unit test. Prima di aggiungere un riferimento Web è necessario avviare il server di sviluppo ASP.NET facendo clic con il pulsante destro del mouse sul progetto del servizio Web e scegliendo quindi Visualizza nel browser.

Utilizzo del metodo TryUrlRedirection

Dopo avere creato un riferimento Web, è possibile creare un'istanza dell'oggetto servizio Web nel codice del test, ma in fase di esecuzione potrebbero verificarsi degli errori poiché il riferimento punta all'URL di un'istanza del server di sviluppo ASP.NET che potrebbe non essere più in esecuzione. Per risolvere questo problema, utilizzare il metodo TryUrlRedirection e modificare l'oggetto servizio Web in modo che punti al server di sviluppo ASP.NET avviato in modo specifico per lo unit test in esecuzione.

TryUrlRedirection è un metodo statico della classe WebServiceHelper che restituisce un valore booleano che indica se il reindirizzamento ha avuto esito positivo.

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

Il metodo TryUrlRedirection utilizza tre argomenti:

  • client è l'oggetto servizio Web che deve essere reindirizzato.

  • context è l'oggetto TestContext per la classe.

  • identifier è il nome definito dall'utente per il server al quale verrà reindirizzato l'oggetto servizio Web.

Dopo avere chiamato questo metodo, se ha avuto esito positivo, è possibile chiamare i metodi Web nell'oggetto servizio Web. In questo modo si accede al servizio Web tramite il server di sviluppo ASP.NET che è stato avviato all'avvio dello unit test. È possibile utilizzare più attributi AspNetDevelopmentServer in un unico unit test per avviare più server, assegnando ad ogni server un nome diverso.

La generazione di unit test non aggiunge automaticamente l'attributo AspNetDevelopmentServer o la chiamata al metodo TryUrlRedirection. Queste entità devono essere aggiunte dall'utente stesso. Sia l'attributo che il metodo si trovano in Microsoft.VisualStudio.TestTools.UnitTesting.Web. Pertanto, si dovrà probabilmente utilizzare un'istruzione using o Imports, come mostrato nell'esempio riportato di seguito.

Esempio di metodo di test di un servizio Web

Di seguito è riportato un metodo di test semplice che verifica il metodo Web HelloWorld() di un servizio 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."
                     );
}

Vedere anche

Attività

Procedura: generare unit test
Procedura: modificare unit test
Procedura: impostare parametri per un servizio Web

Riferimenti

Microsoft.VisualStudio.TestTools.UnitTesting.Web
AspNetDevelopmentServerAttribute
TryUrlRedirection

Concetti

Server Web in Visual Web Developer