Compartilhar via


Instruções passo a passo: suporte Test-First com o recurso Gerar a partir do Uso

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

Primeiro teste de desenvolvimento é uma abordagem de design de software no qual você primeiro escreve testes de unidade baseados nas especificações do produto e, em seguida, escreve o código fonte que é necessário para fazer os testes de êxito.Visual Studiosuporta desenvolvimento de teste-primeiro gerando novos tipos e membros no código-fonte quando você primeiro vê-las em casos de teste antes de serem definidas.

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

O recurso de gerar de uso pode ser usado com estruturas de teste integrarem Visual Studio.Este tópico é demonstrado Microsoft Unit Testing Framework.

ObservaçãoObservação

Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.

Para criar um projeto de biblioteca de classe do Windows e um projeto de teste

  1. Em Visual C# ou Visual Basic, crie um novo projeto de biblioteca de classe do Windows.O nome de GFUDemo_VB ou GFUDemo_CS, dependendo de qual linguagem você estiver usando.

  2. Em Solution Explorer, clique com o botão direito no ícone da solução na parte superior, aponte para Adde clique em Novo projeto.No Novo projeto na caixa de Tipos de projeto painel à esquerda, clique teste.

  3. No modelos painel, clique em Projeto de teste de unidade e aceite o nome padrão de UnitTestProject1.A ilustração a seguir mostra a caixa de diálogo quando ele aparece na Visual C#.Em Visual Basic, a caixa de diálogo é semelhante.

    Caixa de diálogo New Project

    Caixa de diálogo Nova projeto de teste

  4. Clique em OK para fechar o Novo projeto caixa de diálogo.Agora você está pronto para começar a escrever testes

Para gerar uma nova classe de teste de unidade

  1. Projeto de teste contém um arquivo chamado UnitTest1.Clique duas vezes neste arquivo Solution Explorer para abri-lo no Editor de código.Uma classe de teste e o método de teste foi gerados.

  2. Localize a declaração de classe UnitTest1 e renomeá-lo para AutomobileTest.No C#, se um UnitTest1() construtor está presente, renomeie-o para AutomobileTest().

    ObservaçãoObservação

    IntelliSense agora oferece duas alternativas para conclusão da instrução IntelliSense: modo de conclusão e modo sugestão.Use o modo de sugestão para situações em que as classes e membros são usados antes de serem definidas.Quando uma janela de IntelliSense é aberta, você pode pressionar CTRL + ALT + barra de espaços para alternar entre modo de conclusão e sugestão.Consulte Usando IntelliSense para maiores informações.Modo de sugestão ajudará quando você está digitando Automobile na próxima etapa.

  3. Localize o TestMethod1() método e o renomeie para DefaultAutomobileIsInitializedCorrectly().Dentro desse método, criar uma nova instância de uma classe chamada Automobile, como mostra as ilustrações a seguir.Aparece uma linha ondulada, indicando um erro de tempo de compilação e uma marca inteligente é exibida sob o nome de tipo.O local exato da marca inteligente varia, dependendo se você estiver usando Visual Basic ou Visual C#.

    Visual Basic

    Sublinhado de marca inteligente no Visual Basic

    Visual C#

    Sublinhado de marca inteligente em c#

  4. Posicione o ponteiro do mouse sobre a marca inteligente para ver uma mensagem de erro informando que nenhum tipo de chamada Automobile foi definida.Clique na marca inteligente ou pressione CTRL +.(CTRL + ponto) para abrir o menu de atalho de gerar de uso, conforme as ilustrações a seguir.

    Visual Basic

    Menu de contexto de marca inteligente no Visual Basic

    Visual C#

    Menu de contexto de marca inteligente em c#

  5. Agora você tem duas opções.Você poderia clicar em Gerar ' classe automóvel para criar um novo arquivo no seu projeto de teste e preenchê-lo com uma classe vazia chamada Automobile.Isso é uma maneira rápida de criar uma nova classe em um novo arquivo tem modificadores de acesso padrão no projeto atual.Você também pode clicar Gerar novo tipo para abrir o Gerar novo tipo de caixa de diálogo.Isso fornece opções que incluem colocar a classe em um arquivo existente e adicionar o arquivo para outro projeto.

    Clique em Gerar novo tipo para abrir o Gerar novo tipo de caixa de diálogo que é mostrada na ilustração a seguir.No projeto , clique GFUDemo_VB ou GFUDemo_CS para instruir o Visual Studio para adicionar o arquivo para o projeto de código de origem em vez do projeto teste.

    Gerar caixa de diálogo Novo tipo

    Caixa de diálogo Novo tipo gerar

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

  7. Em Solution Explorer, procure sob o nó de projeto GFUDemo_VB ou GFUDemo_CS para verificar se o novo Automobile.vb ou Automobile.cs arquivo está lá.No Editor de código, o foco está ainda em AutomobileTest.DefaultAutomobileIsInitializedCorrectly.Você pode continuar a escrever o teste com um mínimo de interrupção.

Para gerar um stub de propriedade

  • Suponha que a especificação do produto informa que o Automobile classe tem duas propriedades públicas chamadas Model e TopSpeed.Essas propriedades devem ser inicializadas com os valores padrão de "Not specified" e -1 pelo construtor padrão.O teste de unidade seguinte irá verificar que o construtor padrão define as propriedades para seus valores padrão correto.

    Adicione a seguinte linha de código para DefaultAutomobileIsInitializedCorrectly.

    Assert.IsTrue((myAuto.Model = "Not specified") And (myAuto.TopSpeed = -1))
    
    Assert.IsTrue((myAuto.Model == "Not specified") && (myAuto.TopSpeed == -1));
    

    Porque o código faz referência a duas propriedades indefinidas em Automobile, uma marca inteligente aparecer.Clique na marca inteligente para Model e clique em Gerar stub de propriedade.Gerar um stub de propriedade para o TopSpeed propriedade também.

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

    A ilustração a seguir mostra o menu de atalho de marca inteligente.

    Visual Basic

    Gerar o menu de contexto de propriedade no Visual Basic

    Visual C#

    Gerar o menu de contexto de propriedade em c#

Para localizar o código-fonte

  • Use o Navegue para recurso para navegar até o arquivo de código-fonte Automobile.cs ou Automobile.vb para que você possa verificar as novas propriedades foram geradas.

    O Navegue para recurso permite que você insira uma seqüência de texto, como um nome de tipo ou parte do nome, e vá para o local desejado clicando no elemento na lista de resultados rapidamente.

    Abrir o Navegue para caixa de diálogo clicando no Editor de código e pressionando CTRL +, (CTRL + vírgula).Na caixa de texto, digite automóvel.Clique o automóvel classe na lista e clique em OK.

    O Navegue para janela é mostrada na ilustração a seguir.

    Navegue para a janela

    Caixa de diálogo navegar para

Para gerar um stub para um novo construtor

  1. Neste método de teste, você irá gerar um stub de construtor que inicializará o Model e TopSpeed propriedades têm valores que você especificar.Posteriormente, você irá adicionar mais código para concluir o teste.Adicione o seguinte método de teste adicional para seu AutomobileTest classe.

    <TestMethod()> Public Sub AutomobileWithModelNameCanStart()
        Dim model As String = "Contoso" 
        Dim topSpeed As Integer = 199
        Dim myAuto As New Automobile(model, topSpeed)
    End Sub
    
    [TestMethod]
    public void AutomobileWithModelNameCanStart()
    {
        string model = "Contoso";
        int topSpeed = 199;
        Automobile myAuto = new Automobile(model, topSpeed);
    }
    
  2. Clique na marca inteligente no construtor da classe nova e clique em Gerar stub de construtor.No Automobile arquivo de classe, observe que o construtor new examinou os nomes das variáveis locais que são usados na chamada do construtor, encontradas propriedades têm os mesmos nomes na Automobile classe e o código fornecido no corpo do construtor para armazenar os valores de argumento no Model e TopSpeed propriedades.(Em Visual Basic, o _model e _topSpeed campos no novo construtor são os campos fazendo implicitamente definida para o Model e TopSpeed propriedades.)

  3. Depois de gerar o construtor new, aparece um sublinhado ondulado em chamada para o construtor padrão em DefaultAutomobileIsInitializedCorrectly.A mensagem de erro informa que o Automobile classe não tem nenhum construtor que leva zero argumentos.Para gerar um construtor padrão explícita que não tem parâmetros, clique na marca inteligente e clique em Gerar stub de construtor.

Para gerar um stub para um método

  1. Suponha que a especificação afirma que uma nova Automobile pode colocar em um estado de execução se seu Model e TopSpeed propriedades são definidas como algo diferente de valores padrão.Adicione as seguintes linhas para o AutomobileWithModelNameCanStart método.

    myAuto.Start()
    Assert.IsTrue(myAuto.IsRunning = True)
    
    myAuto.Start();
    Assert.IsTrue(myAuto.IsRunning == true);
    
  2. Clique na marca inteligente para o myAuto.Start de chamada de método e clique em Gerar stub do método.

  3. Clique na marca inteligente para o IsRunning propriedade e clique Gerar stub de propriedade.O Automobile classe agora contém o código a seguir.

    Public Class Automobile
        Sub New(ByVal model As String, ByVal topSpeed As Integer)
            _model = model
            _topSpeed = topSpeed
        End Sub 
        Sub New()
            ' TODO: Complete member initialization  
        End Sub 
    
        Property Model() As String 
        Property TopSpeed As Integer 
        Property IsRunning As Boolean 
        Sub Start()
            Throw New NotImplementedException
        End Sub 
    End Class
    
    public class Automobile
    {
        public string Model { get; set; }
        public int TopSpeed { get; set; }
    
        public Automobile(string model, int topSpeed)
        {
            this.Model = model;
            this.TopSpeed = topSpeed;
        }
    
        public Automobile()
        {
            // TODO: Complete member initialization
        }
    
        public void Start()
        {
            throw new NotImplementedException();
        }
    
        public bool IsRunning { get; set; }
    }
    

Para executar os testes

  1. Sobre o Teste de unidade , aponte para Executar testes de unidadee clique em Todos os testes.Este comando executa todos os testes em todas as estruturas de teste gravadas para a solução atual.

    Nesse caso, há dois testes e os dois falharem, conforme o esperado.O DefaultAutomobileIsInitializedCorrectly teste falhar porque o Assert.IsTrue condição retorna False.O AutomobileWithModelNameCanStart teste falhar porque o Start método de Automobile classe lança uma exceção.

    O Resultados de teste janela é mostrada na ilustração a seguir.

    Janela resultados do teste

    Resultados de testes que falharam

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

Para implementar o código-fonte

  1. Adicione o seguinte código para o construtor padrão assim que o Model, TopSpeed e IsRunning propriedades são inicializadas para seus valores padrão correto de "Not specified", -1, e True (true).

    Sub New()
        Model = "Not specified"
        TopSpeed = -1
        IsRunning = True 
    End Sub
    
    public Automobile()
    {
        this.Model = "Not specified";
        this.TopSpeed = -1;
        this.IsRunning = true;
    }
    
  2. Quando o Start método é chamado, ele deve definir o IsRunning sinalizador para true somente se o Model ou TopSpeed propriedades são definidas como algo diferente de seu valor padrão.Remover o NotImplementedException do método body e adicione o seguinte código.

    Sub Start()
        If Model <> "Not specified" Or TopSpeed <> -1 Then
            IsRunning = True 
        Else
            IsRunning = False 
        End If 
    End Sub
    
    public void Start()
    {
        if (this.Model != "Not specified" || this.TopSpeed != -1)
            this.IsRunning = true;
        else 
            this.IsRunning = false;
    }
    

Para executar os testes novamente

  • Sobre o teste , aponte para Executare clique em Todos os testes na solução.Desta vez os testes foram bem-sucedidos.O Resultados de teste janela é mostrada na ilustração a seguir.

    Janela resultados do teste

    Resultados de teste passado

Consulte também

Conceitos

Gerar a partir do uso

Verificando código usando testes de unidade

Outros recursos

Escrevendo código no editor de códigos e de texto

Usando IntelliSense