Partilhar via


Passo a passo: Desenvolvimento orientado a testes com a funcionalidade Gerar a partir do Uso

Este tópico demonstra como usar o recurso Gerar do uso, que oferece suporte ao desenvolvimento orientado a testes.

O desenvolvimento Test-first é uma abordagem ao design de software na qual você primeiro escreve testes de unidade com base nas especificações do produto e, em seguida, escreve o código-fonte necessário para que os testes sejam bem-sucedidos. O Visual Studio oferece suporte ao desenvolvimento test-first gerando novos tipos e membros no código-fonte quando você os referencia pela primeira vez em seus casos de teste, antes que eles sejam definidos.

O Visual Studio gera os novos tipos e membros com interrupção mínima no fluxo de trabalho. Você pode criar stubs para tipos, métodos, propriedades, campos ou construtores sem deixar seu local atual no código. Quando você abre uma caixa de diálogo para especificar opções para geração de tipo, o foco retorna imediatamente ao arquivo aberto atual quando a caixa de diálogo é fechada.

O recurso Gerar a partir do uso pode ser usado com estruturas de teste integradas ao Visual Studio. Neste tópico, o Microsoft Unit Testing Framework é demonstrado.

Observação

As instruções neste artigo ilustram a versão mais recente da experiência de desenvolvimento interativo (IDE) disponível no Visual Studio. Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário. Você pode estar usando uma versão diferente do Visual Studio ou configurações de ambiente diferentes. Para obter mais informações, consulte Personalizar o IDE.

Criar um projeto da Biblioteca de Classes do Windows e um projeto de teste

  1. Em C# ou Visual Basic, crie um novo projeto de biblioteca de classes do Windows . Nomeie-o GFUDemo_VB ou GFUDemo_CS, dependendo do idioma que você está usando.

  2. No Gerenciador de Soluções, clique com o botão direito do mouse no ícone da solução na parte superior, escolha Adicionar>Novo Projeto.

  3. Crie um novo projeto de teste de unidade (.NET Framework).

Adicionar uma referência ao projeto Biblioteca de Classes

  1. No Gerenciador de Soluções, em seu projeto de teste de unidade, clique com o botão direito do mouse na entrada Referências e escolha Adicionar Referência.

  2. Na caixa de diálogo Gerenciador de referências , selecione Projetos e, em seguida, selecione o projeto de biblioteca de classes.

  3. Escolha OK para fechar a caixa de diálogo Gerenciador de referências .

  4. Guarde a sua solução. Agora você está pronto para começar a escrever testes.

Gerar uma nova classe a partir de um teste de unidade

  1. O projeto de teste contém um arquivo chamado UnitTest1. Clique duas vezes neste arquivo no Gerenciador de Soluções para abri-lo no editor de códigos. Uma classe de teste e um método de teste foram gerados.

  2. Localize a declaração para a classe UnitTest1 e renomeie-a para AutomobileTest.

    Observação

    O IntelliSense agora oferece duas alternativas para a conclusão da instrução IntelliSense: modo de conclusão e modo de sugestão. Use o modo de sugestão para situações em que as classes e os membros são usados antes de serem definidos. Quando uma janela do IntelliSense estiver aberta, você poderá pressionar Ctrl+Alt+Space para alternar entre o modo de conclusão e o modo de sugestão. Consulte Usar o IntelliSense para obter mais informações. O modo de sugestão ajudará quando você estiver digitando Automobile na próxima etapa.

  3. Localize o TestMethod1() método e renomeie-o para DefaultAutomobileIsInitializedCorrectly(). Dentro desse método, crie uma nova instância de uma classe chamada Automobile, conforme mostrado nas capturas de tela a seguir. Um sublinhado ondulado é exibido, o que indica um erro em tempo de compilação, e uma lâmpada de erro de Ações Rápidas aparece na margem esquerda ou diretamente abaixo do squiggle se você passar o mouse sobre ele.

    Ações rápidas no Visual Basic

    Ações rápidas em C#

  4. Escolha ou clique na lâmpada Ações rápidas . Você verá uma mensagem de erro informando que o tipo Automobile não está definido. São também apresentadas algumas soluções.

  5. Clique em Gerar novo tipo para abrir a caixa de diálogo Gerar tipo . Esta caixa de diálogo fornece opções que incluem a geração do tipo em um projeto diferente.

  6. Na lista Projeto , clique em GFUDemo_VB ou GFUDemo_CS para instruir o Visual Studio a adicionar o arquivo ao projeto de biblioteca de classes em vez do projeto de teste. Se ainda não estiver selecionado, escolha Criar novo arquivo e nomeie-o Automobile.cs ou Automobile.vb.

    Caixa de diálogo Criar Novo Tipo

  7. Clique em OK para fechar a caixa de diálogo e criar o novo arquivo.

  8. No Explorador de Soluções, procure no nó de projeto GFUDemo_VB ou GFUDemo_CS para verificar se o novo arquivo Automobile.vb ou Automobile.cs está lá. No editor de código, o foco ainda está no AutomobileTest.DefaultAutomobileIsInitializedCorrectly, que permite que você continue a escrever seu teste com um mínimo de interrupção.

Gerar um esboço de propriedade

Suponha que a especificação do produto afirma que a Automobile classe tem duas propriedades públicas nomeadas Model e TopSpeed. Essas propriedades devem ser inicializadas com valores padrão de "Not specified" e -1 pelo construtor padrão. O teste de unidade a seguir verificará se o construtor padrão define as propriedades para seus valores padrão corretos.

  1. Adicione a seguinte linha de código ao DefaultAutomobileIsInitializedCorrectly método de teste.

    Assert.IsTrue((myAuto.Model == "Not specified") && (myAuto.TopSpeed == -1));
    
  2. Como o código faz referência a duas propriedades indefinidas em Automobile, um sublinhado ondulado aparece em Model e TopSpeed. Passe o cursor sobre Model e escolha a lâmpada de erro Ações Rápidas e, em seguida, escolha Gerar propriedade 'Automobile.Model'.

  3. Gere um stub para a propriedade TopSpeed da mesma maneira.

    Automobile Na classe, os tipos das novas propriedades são inferidos corretamente do contexto.

Gerar um stub para um novo construtor

Agora vamos criar um método de teste que gerará um stub de construtor para inicializar as propriedades Model e TopSpeed. Mais tarde, você adicionará mais código para concluir o teste.

  1. Adicione o seguinte método de teste adicional à sua AutomobileTest classe.

    [TestMethod]
    public void AutomobileWithModelNameCanStart()
    {
        string model = "Contoso";
        int topSpeed = 199;
        Automobile myAuto = new Automobile(model, topSpeed);
    }
    
  2. Clique na lâmpada de erro Ações Rápidas sob o rabisco vermelho e, em seguida, clique em Gerar construtor em 'Automóvel'.

    Automobile No arquivo de classe, observe que o novo construtor examinou os nomes das variáveis locais que são usadas na chamada do construtor, encontrou propriedades que têm os mesmos nomes na classe Automobile e forneceu código no corpo do construtor para armazenar os valores dos argumentos nas propriedades Model e TopSpeed.

  3. Depois de gerar o novo construtor, um sublinhado ondulado aparece sob a chamada para o construtor padrão em DefaultAutomobileIsInitializedCorrectly. A mensagem de erro indica que a Automobile classe não tem nenhum construtor que usa argumentos zero. Para gerar um construtor padrão explícito que não tenha parâmetros, clique na lâmpada de erro Ações Rápidas e, em seguida, clique em Gerar construtor em 'Automóvel'.

Gerar um stub para um método

Suponha que a especificação afirma que um novo Automobile pode ser colocado em um IsRunning estado se suas Model e TopSpeed propriedades estão definidas para algo diferente dos valores padrão.

  1. Adicione as seguintes linhas ao AutomobileWithModelNameCanStart método.

    myAuto.Start();
    Assert.IsTrue(myAuto.IsRunning == true);
    
  2. Clique no ícone de sinalização de erro Ações Rápidas para a chamada do método myAuto.Start, e depois clique em Gerar método 'Automobile.Start'.

  3. Clique na lâmpada de Ações Rápidas da IsRunning propriedade e, em seguida, clique em Gerar propriedade 'Automobile.IsRunning'.

    A Automobile classe agora contém um método chamado Start() e uma propriedade chamada IsRunning.

Executar os testes

  1. No menu Teste , escolha Executar>todos os testes.

    O comando Executar>todos os testes executa todos os testes em quaisquer estruturas de teste escritas para a solução atual. Neste caso, há dois testes, e ambos falham, como esperado. O DefaultAutomobileIsInitializedCorrectly teste falha porque a Assert.IsTrue condição retorna False. O teste AutomobileWithModelNameCanStart falha porque o método Start na classe Automobile lança uma exceção.

    A janela Resultados do teste é mostrada na ilustração a seguir.

    Resultados de testes que falharam

  2. Na janela Resultados do teste , clique duas vezes em cada linha de resultado do teste para ir para o local de cada teste.

Implementar o código-fonte

  1. Adicione o seguinte código ao construtor padrão para que as Modelpropriedades , TopSpeed e IsRunning sejam todas inicializadas com seus valores padrão corretos de "Not specified", -1e False (ou false para C#).

    public Automobile()
    {
        this.Model = "Not specified";
        this.TopSpeed = -1;
        this.IsRunning = true;
    }
    
  2. Quando a função Start é chamada, deve definir o indicador IsRunning como verdadeiro apenas se as propriedades Model ou TopSpeed estiverem definidas para algo diferente do seu valor padrão. Remova o NotImplementedException do corpo do método e adicione o código a seguir.

    public void Start()
    {
        if (this.Model != "Not specified" || this.TopSpeed != -1)
            this.IsRunning = true;
        else
            this.IsRunning = false;
    }
    

Execute os testes novamente

  • No menu Teste , aponte para Executar e clique em Todos os Testes.

    Desta vez, os testes são aprovados. A janela Resultados do teste é mostrada na ilustração a seguir.

    Resultados dos testes aprovados