Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tutorial guia você por uma experiência interativa de construção de uma solução de exemplo passo a passo para aprender conceitos de teste de unidade.
Este artigo é sobre como testar um projeto do .NET Core. Se você estiver testando um projeto do ASP.NET Core, consulte Testes de Integração no ASP.NET Core.
Prerequisites
- .NET 10 SDK ou versões posteriores.
- Um editor de texto ou editor de código de sua escolha.
O TUnit é baseado inteiramente em Microsoft.Testing.Platform (MTP) e não dá suporte ao VSTest. Este tutorial usa o modo MTP dedotnet test, que requer o SDK .NET 10.
Criando o projeto de origem
Abra uma janela do shell. Crie um diretório chamado unit-testing-vb-tunit para manter 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 . O esboço a seguir mostra a estrutura do arquivo até agora.
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Torne o 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 classe PrimeService:
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-tunit . Execute o seguinte comando para adicionar o projeto de biblioteca de classes à solução:
dotnet sln add ./PrimeService/PrimeService.vbproj
Criando o projeto de teste
Em seguida, crie o diretório
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Os modelos de projeto do TUnit não estão incluídos no SDK do .NET. Instale-os com o seguinte comando:
dotnet new install TUnit.Templates
Torne o diretório PrimeService.Tests o diretório atual e crie um novo projeto usando o seguinte comando:
dotnet new TUnit -lang VB
Note
Nomes curtos de modelo diferenciam entre maiúsculas e minúsculas. Use TUnit, não tunit.
O comando dotnet new cria um projeto de teste que usa o TUnit como a biblioteca de teste. O arquivo PrimeService.Tests.vbproj gerado é um projeto executável que faz referência ao pacote TUnit, que inclui a estrutura de teste, a biblioteca de asserções e o executor de teste do MTP, para que o projeto não precise de nenhum outro pacote de teste.
O modelo também adiciona testes de exemplo. Exclua todos os arquivos .vb e o diretório Data do diretório PrimeService.Tests, pois este tutorial os substitui por seus próprios testes.
Agora, adicione a biblioteca de classes PrimeService como outra dependência ao projeto. Use o comando dotnet reference add:
dotnet reference add ../PrimeService/PrimeService.vbproj
Você tem o seguinte layout de solução final:
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
Execute o seguinte comando no diretório unit-testing-vb-tunit :
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Configurando o modo MTP do dotnet test
Como o TUnit não dá suporte ao VSTest, dotnet test deve ser executado em seu modo MTP. No diretório unit-testing-vb-tunit , crie um arquivo global.json com o seguinte conteúdo:
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
Para obter mais informações, consulte o modo MTP de dotnet test.
Criando o primeiro teste
Você escreve um teste com falha, faz com que ele passe e repita o processo. No diretório PrimeService.Tests , crie um arquivo PrimeService_IsPrimeShould.vb com o seguinte código:
Imports TUnit.Assertions
Imports TUnit.Assertions.Extensions
Imports TUnit.Core
Namespace PrimeService.Tests
Public Class PrimeService_IsPrimeShould
Private ReadOnly _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Public Async Function IsPrime_InputIs1_ReturnFalse() As Task
Dim result As Boolean = _primeService.IsPrime(1)
Await Assert.That(result).IsFalse()
End Function
End Class
End Namespace
O atributo <Test> indica um método executado pelo executor de teste. O TUnit não precisa de um atributo na classe. As asserções de TUnit são assíncronas, portanto, o teste é um método assíncrono Async Function que retorna um Task e aguarda Assert.That.
Visual Basic coloca o código em cada projeto no namespace raiz do projeto, portanto, a PrimeService classe está no PrimeService.Prime.Services namespace. O teste se refere a ele como Prime.Services.PrimeService, porque, dentro dos namespaces do projeto de teste, o nome PrimeService refere-se a um namespace em vez da classe.
No diretório unit-testing-vb-tunit, execute dotnet test para criar os testes e a biblioteca de classes e, em seguida, executar os testes. O projeto de teste do TUnit contém o ponto de entrada do programa para executar seus testes.
dotnet test inicia o aplicativo de teste usando o projeto de teste de unidade que você criou.
O teste falha. Você ainda não criou a implementação. Faça esse teste passar escrevendo o código mais simples na classe PrimeService 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-tunit , execute dotnet test novamente. O comando dotnet test executa um build para o projeto PrimeService e, em seguida, para o projeto PrimeService.Tests. Depois de compilar os dois projetos, ele executará esse teste único. Ele passa.
Adicionando mais recursos
Agora que você fez um teste aprovado, é hora de escrever mais. Há alguns outros casos simples para números primos: 0, -1. Você pode adicionar esses casos como novos testes com o atributo <Test>, mas isso rapidamente se torna entediante. O TUnit fornece o <Arguments> atributo para criar um conjunto de testes que executam o mesmo código, mas têm argumentos de entrada diferentes.
Em vez de criar novos testes, aplique esse atributo para criar um único teste controlado por dados. Substitua a função IsPrime_InputIs1_ReturnFalse pelo código a seguir, que testa vários valores menores que dois, o número primo mais baixo:
<Test>
<Arguments(-1)>
<Arguments(0)>
<Arguments(1)>
Public Async Function IsPrime_ValuesLessThan2_ReturnFalse(value As Integer) As Task
Dim result As Boolean = _primeService.IsPrime(value)
Await Assert.That(result).IsFalse()
End Function
Execute dotnet teste dois desses testes falharão. Para que todos os testes passem, altere a If cláusula no início do IsPrime método no arquivo PrimeService.vb :
If candidate < 2 Then
Continue a iterar adicionando mais testes e mais códigos na biblioteca principal.
Você criou uma pequena biblioteca e um conjunto de testes unitários 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 das metas do aplicativo.