Testando serviços da Web

Você pode testar serviços da Web chamando métodos da Web a partir de testes de unidade.Testar serviços da Web é muito semelhante a testar outro código usando testes de unidade em que você pode usar instruções Assert, e os testes produzem o mesmo intervalo de resultados.No entanto, a Microsoft.VisualStudio.TestTools.UnitTesting.Web namespace do Visual Studio Team System Test Edition Fornece atributos e métodos específicos para testar serviços da Web; eles são descritos na Testando um serviço Web localmente.

A lista a seguir descreve duas maneiras de testar serviços da Web com testes de unidade:

  • serviço Web é executado em um servidor Web ativo.Não existem requisitos especiais para testar um serviço Web que é executado em um local ou um servidor remoto, sistema autônomo o IIS.Para fazer isso, adicione uma referência da Web e, em seguida, chame sistema autônomo métodos Web de serviço Web dos testes de unidade exatamente sistema autônomo eles devem chamar sistema autônomo métodos de um programa que não é um serviço Web.Para obter mais informações sobre como adicionar uma referência da Web, consulte Caixa de Diálogo Add Web Reference. Para obter mais informações sobre como criar testes de unidade, consulte Como: Gerar um teste de unidade e Como: Criar um teste de unidade. Para obter informações sobre como usar uma Web de teste para testar um serviço Web, consulte Como: Criar um teste de serviço Web.

  • serviço Web não está hospedado em um servidor Web ativo.Conforme descrito em Testando um serviço Web localmente, você pode testar um serviço Web que é executado no computador local e não em um servidor Web, sistema autônomo o IIS.Para fazer isso, você usar um atributo fornecido pelo Ferramentas de teste do Team System Para iniciar o ASP.NET Development servidor. Isso cria um servidor temporário no localhost que hospeda serviço Web que você está testando.Para obter mais informações sobre o servidor de desenvolvimento ASP.NET, consulte Servidores Web no Visual Web Developer.

Testando um serviço da Web localmente

Este é o processo para teste de um serviço da Web que é executado em seu computador local mas não no IIS:

  1. Crie o serviço da Web no sistema de arquivos local.Para obter mais informações, consulte Demonstra Passo a passo: Criando um serviço da Web usando Visual Basic ou Visual C#.

  2. Gere testes de unidade para o serviço da Web da forma padrão para gerar testes de unidade.Para obter mais informações, consulte Como: Gerar um teste de unidade.

  3. Adicionar o AspNetDevelopmentServerAttribute o atributo para o teste de unidade. Os argumentos para esta classe de atributo apontam para o site do serviço da Web e do nome do servidor.Para obter mais informações, consulte Ensuring Access to ASP.NET Development Server.

  4. Dentro do teste de unidade, adicione uma telefonar para o TryUrlRedirection método de apontar o objeto de serviço Web para o servidor correto. Verifique que é retornado verdadeiro, e use um comando Assert para fazer o teste falhar se o redirecionamento falhar.Para obter mais informações, consulte Using the TryUrlRedirection Method.

  5. Chame o serviço da Web ou execute-o de qualquer outra forma que você achar necessária para testá-lo completamente.Para obter um exemplo disso, consulte Example Web Service Test Method.

Garantindo acesso ao Servidor de Desenvolvimento ASP.NET

Se o site do serviço da Web estiver em seu sistema de arquivos local, ele usa o Servidor de Desenvolvimento ASP.NET e ele não é um site do IIS.Nesse caso, o processo de geração de testes de unidade inicia um Servidor de Desenvolvimento ASP.NET para o serviço da Web e adiciona uma referência da Web para o projeto de teste.

O ASP.NET Development Server é temporário e a referência da Web poderia falhar depois do servidor for interrompido.Ferramentas de teste do Team System resolver esse problema fornecendo o atributo AspNetDevelopmentServer. Essa classe de atributos tem dois construtores:

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

Os parâmetros a seguir serão usados com esse atributo:

  • name é um nome definido pelo usuário que está associado com o servidor.

  • pathToWebApp é o caminho no disco para o site da Web que você está testando.

  • webAppRoot é o caminho virtual em que o site aparece no servidor. Por exemplo, se webAppRoot é definido como/WebSite1, o caminho para o site é https://localhost:<porta>/WebSite1.Para o primeiro construtor, o padrão é https://localhost:<porta>/.

Observação:

Os parâmetros pathToWebApp e webAppRoot são usados da mesma maneira com AspNetDevelopmentServerAttribute sistema autônomo são para o AspNetDevelopmentServerHost atributo, que é usado para testes de unidade ASP.NET.

Quando você marca um teste com o atributo AspNetDevelopmentServerAttribute, um servidor de desenvolvimento ASP.NET é iniciado sempre que o teste é executado. Uma entrada que contém a URL do site que está sendo testada é adicionada ao TestContext.Properties da classe do teste.A chave para essa entrada é AspNetDevelopmentServer. <nome>, onde

<nome>é o valor guardado pelaname argumento do atributo. Esse mecanismo assegura que o serviço da Web esteja sempre disponível em um Servidor de Desenvolvimento ASP.NET quando o teste é executado e que a URL seja conhecida em tempo de execução.

Para testar um serviço da Web dessa maneira, você poderia gerar testes de unidade, ou você poderia escrever um teste de unidade à mão e marcá-lo com esse atributo.A criação à mão requer que você tenha uma referência da Web no local para que você possa referenciar o tipo do serviço da Web no código do seu teste de unidade.Antes de adicionar a referência da Web, você deve iniciar um Servidor de Desenvolvimento ASP.NET clicando com o botão direito do mouse o projeto de Serviço da Web e escolhendo View in Browser.

Usando o método TryUrlRedirection

Após você ter uma referência da Web, você pode criar uma instância do objeto de serviço da Web no seu código teste, mas isso poderá falhar em tempo de execução porque a referência pode apontar para a URL de uma instância do Servidor de Desenvolvimento ASP.NET que pode não mais estar sendo executada.Para resolver esse problema, use o TryUrlRedirection método para modificar o objeto de serviço Web para que ela aponta para o ASP.NET Development servidor foi iniciado especificamente para o teste de unidade em execução.

TryUrlRedirection é um método estático das WebServiceHelper classe que retorna um valor booliano que indica se o redirecionamento obteve êxito.

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

TryUrlRedirection tem três argumentos:

  • client é o objeto de serviço Web para ser redirecionado.

  • context é o objeto TestContext para a classe.

  • identifier é o nome definido pelo usuário para o servidor ao qual o objeto de serviço Web está sendo redirecionado.

Após chamar esse método, caso ele tenha êxito, você pode então chamar métodos da Web para o objeto de serviço da Web.Desta forma, o serviço da Web é acessado através do Servidor de Desenvolvimento ASP.NET que foi iniciado quando você iniciou o teste de unidade.Você pode usar vários atributos AspNetDevelopmentServer em um único teste de unidade para iniciar vários servidores, contanto que você dê a eles nomes diferentes.

A geração de testes de unidade não adicionam o atributo AspNetDevelopmentServer ou a chamada do método TryUrlRedirection automaticamente.Você deve adicionar essas entidades.Tanto o atributo e o método estão em Microsoft.VisualStudio.TestTools.UnitTesting.Web.Portanto, você provavelmente precisará de um using ou Imports demonstrativo, conforme mostrado no exemplo a seguir.

Exemplo de um Método de Teste de Serviço da Web

Este é um método de teste simples que testa o HelloWorld() método Web de um serviço 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."
                     );
}

Consulte também

Tarefas

Como: Criar um teste de unidade

Como: Parametrizar um servidor Web

Conceitos

Servidores Web no Visual Web Developer

Referência

Microsoft.VisualStudio.TestTools.UnitTesting.Web

AspNetDevelopmentServerAttribute

TryUrlRedirection

Outros recursos

Como: Gerar um teste de unidade