Teste de unidade de bibliotecas do Visual Basic .NET Core usando o teste dotnet e MSTest
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.
Criando o projeto de origem
Abra uma janela de shell. Crie um diretório chamado unit-testing-vb-mstest para armazenar a solução.
Dentro deste novo diretório, execute dotnet new sln
para criar uma nova solução. Essa prática facilita o gerenciamento da biblioteca de classes e do projeto de teste de unidade.
Dentro do diretório da solução, crie um diretório PrimeService . Você tem o seguinte diretório e estrutura de arquivos até agora:
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Faça do PrimeService o diretório atual e execute dotnet new classlib -lang VB
para criar o projeto de origem. 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 dotnet sln add .\PrimeService\PrimeService.vbproj
para adicionar o projeto de biblioteca de classes à solução.
Criando o projeto de teste
Em seguida, crie o diretório PrimeService.Tests . A estrutura de tópicos a seguir mostra a estrutura de diretórios:
/unit-testing-vb-mstest
unit-testing-vb-mstest.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 dotnet new mstest -lang VB
o . Este comando cria um projeto de teste que usa MSTest como a biblioteca de teste. O modelo gerado configura o executor de teste no PrimeServiceTests.vbproj:
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
</ItemGroup>
O projeto de teste requer outros pacotes para criar e executar testes de unidade. dotnet new
na etapa anterior adicionou MSTest e o corredor MSTest. 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-mstest
unit-testing-vb-mstest.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.vbproj
Execute dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
no diretório unit-testing-vb-mstest .
Criando o primeiro teste
Você escreve um teste com reprovação, faz com que seja aprovado e, em seguida, repita o processo. Remova UnitTest1.vb do diretório PrimeService.Tests e crie um novo arquivo do Visual Basic chamado PrimeService_IsPrimeShould.VB. Adicione o seguinte código:
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Namespace PrimeService.Tests
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestMethod>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.IsFalse(result, "1 should not be prime")
End Sub
End Class
End Namespace
O <TestClass>
atributo indica uma classe que contém testes. O <TestMethod>
atributo indica um método que é executado pelo executor de teste. A partir do unit-testing-vb-mstest, execute dotnet test
para criar os testes e a biblioteca de classes e, em seguida, execute os testes. O executor de teste MSTest 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-mstest, 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.
Adicionando mais recursos
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 <TestMethod>
. Existem outros atributos MSTest que permitem escrever um conjunto de testes semelhantes. Um <DataTestMethod>
atributo representa um conjunto de testes que executam o mesmo código, mas têm argumentos de entrada diferentes. Você pode usar o <DataRow>
atributo para especificar valores para essas entradas.
Em vez de criar novos testes, aplique esses dois atributos para criar uma única teoria. A teoria é um método que testa vários valores inferiores a dois, que é o menor número primo:
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<DataTestMethod>
<DataRow(-1)>
<DataRow(0)>
<DataRow(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{value} should not be prime")
End Sub
<DataTestMethod>
<DataRow(2)>
<DataRow(3)>
<DataRow(5)>
<DataRow(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsTrue(result, $"{value} should be prime")
End Sub
<DataTestMethod>
<DataRow(4)>
<DataRow(6)>
<DataRow(8)>
<DataRow(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{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 método:
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.