Demonstra Passo a passo: Primeiro teste de suporte com a gerar a partir do recurso de uso
Este tópico demonstra como usar o Gerar a partir de uso o recurso, que suporta o desenvolvimento de teste primeiro.
Desenvolvimento de teste primeiro é uma abordagem para design de software no qual você primeiro escreve testes de unidade com base nas especificações do produto e, em seguida, escreva o código fonte que é necessário para fazer os testes de êxito. Visual Studiooferece suporte ao desenvolvimento de teste-primeiro gerando novos tipos e membros no código fonte quando você primeiro referenciá-los no seus casos de teste antes de serem definidas.
Visual Studiogera a 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 de construtores sem sair do seu local atual no código. Quando você abre uma caixa de diálogo para especificar as opções para a geração de tipo, o foco retorna imediatamente para o arquivo aberto atual quando a caixa de diálogo é fechada.
O recurso de gerar de uso pode ser usado com estruturas de teste que se integram Visual Studio. Neste tópico, o Microsoft Unit Testing Framework é demonstrado.
Observação |
---|
Esta explicação passo a passo foi escrita com Visual Basic ou C# Visual development settings em mente. Explicação passo a passo também funcionarão com outras configurações. Para alterar as configurações recomendadas, você pode usar este procedimento: On the Tools menu, click Import and Export Settings. Na primeira página da Import and Export Settings Wizard, clique em Redefinir todas as configurações. Sobre o Escolher um conjuntos de configurações padrão página, clique em Visual Basic configurações de desenvolvimento ou Configurações de desenvolvimento do Visual C#. |
Para criar um projeto de biblioteca de classes do Windows e um projeto de teste
Em Visual C# ou Visual Basic, crie um novo projeto de biblioteca de classes do Windows. O nome GFUDemo_VB ou GFUDemo_CS, dependendo de qual linguagem você estiver usando.
Em Solution Explorer, o botão direito do mouse no ícone de solução na parte superior, aponte para Adde em seguida, clique em Novo projeto. No Novo projeto na caixa de Tipos de projeto painel à esquerda, clique teste.
No modelos de painel, clique em O projeto de teste e aceite o nome padrão de TestProject1. 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.
Novo projeto caixa de diálogo
Clique em OK para fechar a Novo projeto caixa de diálogo. Agora você está pronto para começar a escrever testes
Para gerar uma nova classe de um teste de unidade
O projeto de teste contém um arquivo chamado UnitTest1. Clique duas vezes neste arquivo em Solution Explorer para abri-lo no Editor de código. Uma classe de teste e o método de teste foram gerados.
Localize a declaração de classe UnitTest1 e renomeá-lo para AutomobileTest. No C#, se um UnitTest1() construtor estiver presente, renomeá-lo para AutomobileTest().
Observação Agora, o IntelliSense oferece duas alternativas para a conclusão da instrução de IntelliSense: modo de conclusão e o modo de sugestão. Use o modo de sugestão para situações em que 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 o modo de conclusão e sugestão. See Listar Membros for more information. Modo de sugestão ajudará quando você está digitando Automobile na próxima etapa.
Localize o TestMethod1() método e renomeá-lo para DefaultAutomobileIsInitializedCorrectly(). Dentro desse método, criar uma nova instância de uma classe chamada Automobile, conforme mostrado no seguinte ilustrações. Aparece uma linha ondulada, que indica um erro em tempo de compilação e uma marca inteligente aparece sob o nome de tipo. O local exato da marca inteligente varia, dependendo se você estiver usando o Visual Basic ou Visual C#.
Visual Basic
Visual C#
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 gerar de uso, conforme mostrado nas ilustrações a seguir.
Visual Basic
Visual C#
Agora você tem duas opções. Você poderia clicar em Gerar ' classe automóvel ' para criar um novo arquivo em seu projeto de teste e preenchê-lo com uma classe vazia chamada Automobile. Esta é uma maneira rápida de criar uma nova classe em um novo arquivo que tenha os modificadores de acesso padrão no projeto atual. Você também pode clicar em Gerar novo tipo de para abrir o Gerar novo tipo de caixa de diálogo. Isso fornece opções que incluem a colocação de classe em um arquivo existente e adicionar o arquivo para outro projeto.
Clique em Gerar novo tipo de para abrir o Gerar novo tipo de caixa de diálogo, que é mostrada na ilustração a seguir. No projeto , clique em 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 de teste.
Gerar caixa de diálogo Novo tipo
Clique em OK para fechar a caixa de diálogo e criar o novo arquivo.
Em Solution Explorer, procure sob o nó de projeto de GFUDemo_VB ou GFUDemo_CS para verificar se o novo Automobile.vb ou arquivo de automobile.cs estiver lá. No Editor de código, o foco está ainda em AutomobileTest.DefaultAutomobileIsInitializedCorrectly. Você pode continuar a gravar o teste com um mínimo de interrupção.
Para gerar um stub de propriedade
Suponha que a especificação de produto afirma que o Automobile classe tem duas propriedades public chamadas Model e TopSpeed. Essas propriedades devem ser inicializadas com valores padrão do "Not specified" e -1 pelo construtor padrão. O seguinte teste de unidade 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, em seguida, 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
Visual C#
Para localizar o código-fonte
Use o Navegue para o 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, por exemplo, um nome de tipo ou a parte de um nome, e vá para o local desejado clicando-se o elemento na lista de resultados rapidamente.
Abrir o Navegue para caixa de diálogo clicando no Editor de código e pressionando o CTRL +, (CTRL + vírgula). Na caixa de texto, digite automóvel. Clique o automóvel de classe na lista e clique em OK.
O Navegue para janela é mostrada na ilustração a seguir.
Navegue para a janela
Para gerar um stub para um novo construtor.
Neste método de teste, você irá gerar um stub do construtor irá inicializar o Model e TopSpeed Propriedades para terem 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); }
Clique na marca inteligente em um novo construtor de classe e, em seguida, 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, encontrado propriedades que têm os mesmos nomes na Automobile classe e o código fornecido no corpo do construtor para armazenar os valores de argumento na Model e TopSpeed Propriedades. (Em Visual Basic, o _model e _topSpeed campos no novo construtor são os campos de apoio implicitamente definidos para o Model e TopSpeed Propriedades.)
Depois de gerar o construtor new, um sublinhado ondulado aparece sob a chamada para o construtor padrão em DefaultAutomobileIsInitializedCorrectly. A mensagem de erro informa que o Automobile classe não tem nenhum construtor que leva argumentos zero. 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.
Suponha que a especificação afirma que uma nova Automobile podem ser colocados 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);
Clique na marca inteligente para o myAuto.Start chamada de método e, em seguida, clique em Gerar stub do método.
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
Sobre o teste , aponte para Executare, em seguida, clique em Todos os testes na solução. Esse comando executa todos os testes em todas as estruturas de teste que são escritas 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 retorna a condição de False. O AutomobileWithModelNameCanStart teste falhar porque o Start método na Automobile classe lança uma exceção.
O Resultados de teste janela é mostrada na ilustração a seguir.
Janela de resultados de teste
No Test Results janela, clique duas vezes em cada linha de resultado de teste para ir para o local de cada falha de teste.
Observação Se clicar duas vezes não levam a falha de teste no código, você pode ativar esse recurso seguindo o procedimento a seguir: No Ferramentas menu, clique em Opções, em seguida, expanda Ferramentas de teste e clique em A execução de teste. Selecione o duas vezes em um resultado de teste de unidade com falha ou Inconclusive exibe o ponto de falha no teste de caixa de seleção.
Para implementar o código-fonte
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; }
Quando o Start método é chamado, ele deve definir o IsRunning Sinalizador para true somente se a Model ou TopSpeed propriedades são definidas como algo diferente de seus valores padrão. Remover o NotImplementedException do método body e adicione o código a seguir.
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, em seguida, clique em Todos os testes na solução. Neste momento os testes foram bem-sucedidos. O Resultados de teste janela é mostrada na ilustração a seguir.
Janela de resultados de teste
Consulte também
Tarefas
Como: Procurar por objetos, definições e referências (símbolos)