evento
17/03, 21 - 21/03, 10
Junte-se à série meetup para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registe-se agoraEste browser já não é suportado.
Atualize para o Microsoft Edge para tirar partido das mais recentes funcionalidades, atualizações de segurança e de suporte técnico.
Este tutorial leva você através de uma experiência interativa criando uma solução de exemplo passo a passo para aprender conceitos de teste de unidade. Se preferir seguir o tutorial usando uma solução pré-criada, visualize ou baixe o código de exemplo antes de começar. Para obter instruções de download, consulte Exemplos e tutoriais.
Este artigo é sobre como testar um projeto .NET Core. Se você estiver testando um projeto ASP.NET Core, consulte Testes de integração no ASP.NET Core.
Abra uma janela de shell. Crie um diretório chamado unit-testing-vb-nunit para armazenar a solução. Dentro desse novo diretório, execute o seguinte comando para criar um novo arquivo de solução para a biblioteca de classes e o projeto de teste:
dotnet new sln
Em seguida, crie um diretório PrimeService . A estrutura de tópicos a seguir mostra a estrutura do arquivo até agora:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Faça do PrimeService o diretório atual e execute o seguinte comando para criar o projeto de origem:
dotnet new classlib -lang VB
Renomeie Class1.VB para PrimeService.VB. Você cria uma implementação com falha da PrimeService
classe:
Namespace Prime.Services
Public Class PrimeService
Public Function IsPrime(candidate As Integer) As Boolean
Throw New NotImplementedException("Please create a test first.")
End Function
End Class
End Namespace
Altere o diretório de volta para o diretório unit-testing-vb-using-mstest . Execute o seguinte comando para adicionar o projeto de biblioteca de classes à solução:
dotnet sln add .\PrimeService\PrimeService.vbproj
Em seguida, crie o diretório PrimeService.Tests . A estrutura de tópicos a seguir mostra a estrutura de diretórios:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Faça do diretório PrimeService.Tests o diretório atual e crie um novo projeto usando o seguinte comando:
dotnet new nunit -lang VB
O comando dotnet new cria um projeto de teste que usa NUnit como a biblioteca de teste. O modelo gerado configura o executor de teste no arquivo PrimeServiceTests.vbproj :
<ItemGroup>
<PackageReference Include="nunit" Version="4.3.2" />
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
</ItemGroup>
Nota
Antes do .NET 9, o código gerado pode fazer referência a versões mais antigas da estrutura de teste NUnit. Você pode usar dotnet CLI para atualizar os pacotes. Como alternativa, abra o arquivo PrimeService.Tests.vbproj e substitua o conteúdo do grupo de itens de referências de pacote pelo código acima.
O projeto de teste requer outros pacotes para criar e executar testes de unidade. dotnet new
na etapa anterior adicionado NUnit e o adaptador de teste NUnit. Agora, adicione a biblioteca de PrimeService
classes como outra dependência ao projeto. Use o dotnet add reference
comando:
dotnet add reference ../PrimeService/PrimeService.vbproj
Você pode ver o arquivo inteiro no repositório de amostras no GitHub.
Você tem o seguinte layout de solução final:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
Execute o seguinte comando no diretório unit-testing-vb-nunit :
dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
Você escreve um teste com reprovação, faz com que seja aprovado e, em seguida, repita o processo. No diretório PrimeService.Tests, renomeie o arquivo UnitTest1.vb para PrimeService_IsPrimeShould.VB e substitua todo o seu conteúdo pelo seguinte código:
Imports NUnit.Framework
Namespace PrimeService.Tests
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.That(result, [Is].False, $"1 should not be prime")
End Sub
End Class
End Namespace
O <TestFixture>
atributo indica uma classe que contém testes. O <Test>
atributo indica um método que é executado pelo executor de teste. A partir do unit-testing-vb-nunit, execute dotnet test
para construir os testes e a biblioteca de classes e, em seguida, execute os testes. O executor de teste NUnit contém o ponto de entrada do programa para executar seus testes. dotnet test
Inicia o executor de teste usando o projeto de teste de unidade que você criou.
O seu teste falha. Você ainda não criou a implementação. Faça este teste passar escrevendo o PrimeService
código mais simples na classe que funciona:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Please create a test first.")
End Function
No diretório unit-testing-vb-nunit, execute dotnet test
novamente. O dotnet test
comando executa uma compilação para o PrimeService
projeto e, em seguida, para o PrimeService.Tests
projeto. Depois de construir ambos os projetos, ele executa esse teste único. Passa.
Agora que você fez um teste aprovado, é hora de escrever mais. Existem alguns outros casos simples para números primos: 0, -1. Você poderia adicionar esses casos como novos testes com o atributo, mas isso rapidamente se torna tedioso <Test>
. Existem outros atributos xUnit que permitem escrever um conjunto de testes semelhantes. Um <TestCase>
atributo representa um conjunto de testes que executam o mesmo código, mas têm argumentos de entrada diferentes. Você pode usar o <TestCase>
atributo para especificar valores para essas entradas.
Em vez de criar novos testes, aplique esses dois atributos para criar uma série de testes que testam vários valores menores que dois, que é o número primo mais baixo:
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestCase(-1)>
<TestCase(0)>
<TestCase(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
<TestCase(2)>
<TestCase(3)>
<TestCase(5)>
<TestCase(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].True, $"{value} should be prime")
End Sub
<TestCase(4)>
<TestCase(6)>
<TestCase(8)>
<TestCase(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
End Class
Execute dotnet test
, e dois desses testes falharão. Para que todos os testes sejam aprovados, altere a if
cláusula no início do Main
método no arquivo PrimeServices.cs :
if candidate < 2
Continue a iterar adicionando mais testes, mais teorias e mais código na biblioteca principal. Você tem a versão concluída dos testes e a implementação completa da biblioteca.
Você criou uma pequena biblioteca e um conjunto de testes de unidade para essa biblioteca. Você estruturou a solução para que a adição de novos pacotes e testes faça parte do fluxo de trabalho normal. Você concentrou a maior parte do seu tempo e esforço na resolução dos objetivos do aplicativo.
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
evento
17/03, 21 - 21/03, 10
Junte-se à série meetup para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registe-se agoraFormação
Módulo
Teste em C# no Visual Studio - Training
Comece a testar seus aplicativos C# usando as ferramentas de teste no Visual Studio. Aprenda a escrever testes, usar o Gerenciador de Testes, criar conjuntos de testes e aplicar o padrão de refatoramento vermelho, verde para escrever código.