Tutorial: Testar uma biblioteca de classes .NET usando o Visual Studio Code
Este tutorial mostra como automatizar o teste de unidade adicionando um projeto de teste a uma solução.
Pré-requisitos
- Este tutorial funciona com a solução que você cria em Criar uma biblioteca de classes .NET usando o Visual Studio Code.
Criar um projeto de teste de unidade
Os testes de unidade fornecem testes automatizados de software durante o desenvolvimento e a publicação. A estrutura de teste que você usa neste tutorial é MSTest. MSTest é uma das três estruturas de teste que você pode escolher. Os outros são xUnit e nUnit.
Inicie o Visual Studio Code.
Abra a solução que você criou em Criar uma biblioteca de classes .NET usando o
ClassLibraryProjects
Visual Studio Code.Crie um projeto de teste de unidade chamado "StringLibraryTest".
dotnet new mstest -o StringLibraryTest
O modelo de projeto cria um arquivo UnitTest1.cs com o seguinte código:
namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } }
O código-fonte criado pelo modelo de teste de unidade faz o seguinte:
- Ele aplica o TestClassAttribute atributo à
UnitTest1
classe. - Ele aplica o TestMethodAttribute atributo para definir
TestMethod1
. - Ele importa o Microsoft.VisualStudio.TestTools.UnitTesting namespace, que contém os tipos usados para teste de unidade. O namespace é importado por meio de uma
global using
diretiva em GlobalUsings.cs.
Cada método marcado com [TestMethod] em uma classe de teste marcada com [TestClass] é executado automaticamente quando o teste de unidade é invocado.
- Ele aplica o TestClassAttribute atributo à
Adicione o projeto de teste à solução.
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Adicionar uma referência de projeto
Para que o projeto de teste funcione com a StringLibrary
classe, adicione uma referência no StringLibraryTest
projeto ao StringLibrary
projeto.
Execute o seguinte comando:
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Adicionar e executar métodos de teste de unidade
Quando o Visual Studio invoca um teste de unidade, ele executa cada método marcado com o atributo em uma classe marcada com o TestMethodAttributeTestClassAttribute atributo. Um método de teste termina quando a primeira falha é encontrada ou quando todos os testes contidos no método foram bem-sucedidos.
Os testes mais comuns chamam membros da Assert classe. Muitos métodos de afirmação incluem pelo menos dois parâmetros, um dos quais é o resultado esperado do teste e o outro é o resultado real do teste. Alguns dos métodos mais frequentemente chamados da Assert
classe são mostrados na tabela a seguir:
Métodos de afirmação | Function |
---|---|
Assert.AreEqual |
Verifica se dois valores ou objetos são iguais. A declaração falhará se os valores ou objetos não forem iguais. |
Assert.AreSame |
Verifica se duas variáveis de objeto se referem ao mesmo objeto. A asserção falhará se as variáveis se referirem a objetos diferentes. |
Assert.IsFalse |
Verifica se uma condição é false . A asserção falhará se a condição for true . |
Assert.IsNotNull |
Verifica se um objeto não null é . A declaração falhará se o objeto for null . |
Você também pode usar o método em um método de teste para indicar o Assert.ThrowsException tipo de exceção que se espera que ele lance. O teste falhará se a exceção especificada não for lançada.
Ao testar o StringLibrary.StartsWithUpper
método, você deseja fornecer várias cadeias de caracteres que começam com um caractere maiúsculo. Você espera que o método retorne true
nesses casos, para que você possa chamar o Assert.IsTrue método. Da mesma forma, você deseja fornecer várias cadeias de caracteres que começam com algo diferente de um caractere maiúsculo. Você espera que o método retorne false
nesses casos, para que você possa chamar o Assert.IsFalse método.
Como seu método de biblioteca lida com cadeias de caracteres, você também deseja certificar-se de que ele manipula com êxito uma cadeia de caracteres vazia (String.Empty
) e uma null
cadeia de caracteres. Uma cadeia de caracteres vazia é aquela que não tem caracteres e cuja Length é 0. Uma null
cadeia de caracteres é aquela que não foi inicializada. Você pode chamar StartsWithUpper
diretamente como um método estático e passar um único String argumento. Ou você pode chamar StartsWithUpper
como um método de extensão em uma string
variável atribuída a null
.
Você definirá três métodos, cada um dos quais chama um Assert método para cada elemento em uma matriz de cadeia de caracteres. Você chamará uma sobrecarga de método que permite especificar uma mensagem de erro a ser exibida em caso de falha no teste. A mensagem identifica a cadeia de caracteres que causou a falha.
Para criar os métodos de teste:
Abra StringLibraryTest/UnitTest1.cs e substitua todo o código pelo código a seguir.
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '{0}': true; Actual: {1}", word, result)); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word, result)); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = { string.Empty, null }; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, result)); } } }
O teste de caracteres maiúsculos
TestStartsWithUpper
no método inclui a letra maiúscula grega alfa (U+0391) e a letra maiúscula cirílica EM (U+041C). O teste de caracteres minúsculosTestDoesNotStartWithUpper
no método inclui a letra pequena grega alfa (U+03B1) e a letra pequena cirílica Ghe (U+0433).Guardar as suas alterações.
Execute os testes:
dotnet test StringLibraryTest/StringLibraryTest.csproj
A saída do terminal mostra que todos os testes foram aprovados.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net8.0)
Lidar com falhas de teste
Se você estiver fazendo desenvolvimento orientado a testes (TDD), você escreve testes primeiro e eles falham na primeira vez que você os executa. Em seguida, você adiciona código ao aplicativo que faz o teste ser bem-sucedido. Para este tutorial, você criou o teste depois de escrever o código do aplicativo que ele valida, para que você não tenha visto o teste falhar. Para validar que um teste falha quando você espera que ele falhe, adicione um valor inválido à entrada de teste.
Modifique a
words
TestDoesNotStartWithUpper
matriz no método para incluir a cadeia de caracteres "Error".string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Execute os testes:
dotnet test StringLibraryTest/StringLibraryTest.csproj
A saída do terminal mostra que um teste falha e fornece uma mensagem de erro para o teste com falha: "Assert.IsFalse falhou. Esperado para 'Erro': false; atual: Verdadeiro". Devido à falha, nenhuma cadeia de caracteres na matriz após "Error" foi testada.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
Remova a cadeia de caracteres "Erro" que você adicionou na etapa 1. Execute novamente o teste e os testes são aprovados.
Testar a versão Release da biblioteca
Agora que todos os testes passaram ao executar a compilação Debug da biblioteca, execute os testes um tempo adicional em relação à compilação Release da biblioteca. Vários fatores, incluindo otimizações do compilador, às vezes podem produzir um comportamento diferente entre as compilações Debug e Release.
Execute os testes com a configuração de compilação da versão:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Os testes são aprovados.
Testes de depuração
Se você estiver usando o Visual Studio Code como seu IDE, poderá usar o mesmo processo mostrado em Depurar um aplicativo de console .NET usando o Visual Studio Code para depurar o código usando seu projeto de teste de unidade. Em vez de iniciar o projeto do aplicativo ShowCase , abra StringLibraryTest/UnitTest1.cs e selecione Depurar todos os testes entre as linhas 7 e 8. Se você não conseguir encontrá-lo, pressione Ctrl+Shift+P para abrir a paleta de comandos e digite Recarregar janela.
O Visual Studio Code inicia o projeto de teste com o depurador anexado. A execução será interrompida em qualquer ponto de interrupção que você adicionou ao projeto de teste ou ao código da biblioteca subjacente.
Recursos adicionais
Próximos passos
Neste tutorial, você testou uma biblioteca de classes. Você pode disponibilizar a biblioteca para outras pessoas publicando-a no NuGet como um pacote. Para saber como, siga um tutorial do NuGet:
Se você publicar uma biblioteca como um pacote NuGet, outras pessoas poderão instalá-la e usá-la. Para saber como, siga um tutorial do NuGet:
Uma biblioteca não precisa ser distribuída como um pacote. Ele pode ser empacotado com um aplicativo de console que o usa. Para saber como publicar um aplicativo de console, consulte o tutorial anterior desta série:
A extensão de código do Visual Studio C# Dev Kit fornece mais ferramentas para desenvolver aplicativos e bibliotecas em C#:
Este tutorial mostra como automatizar o teste de unidade adicionando um projeto de teste a uma solução.
Pré-requisitos
- Este tutorial funciona com a solução que você cria em Criar uma biblioteca de classes .NET usando o Visual Studio Code.
Criar um projeto de teste de unidade
Os testes de unidade fornecem testes automatizados de software durante o desenvolvimento e a publicação. A estrutura de teste que você usa neste tutorial é MSTest. MSTest é uma das três estruturas de teste que você pode escolher. Os outros são xUnit e nUnit.
Inicie o Visual Studio Code.
Abra a solução que você criou em Criar uma biblioteca de classes .NET usando o
ClassLibraryProjects
Visual Studio Code.Crie um projeto de teste de unidade chamado "StringLibraryTest".
dotnet new mstest -o StringLibraryTest
O modelo de projeto cria um arquivo UnitTest1.cs com o seguinte código:
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
O código-fonte criado pelo modelo de teste de unidade faz o seguinte:
- Ele importa o Microsoft.VisualStudio.TestTools.UnitTesting namespace, que contém os tipos usados para teste de unidade.
- Ele aplica o TestClassAttribute atributo à
UnitTest1
classe. - Ele aplica o TestMethodAttribute atributo para definir
TestMethod1
.
Cada método marcado com [TestMethod] em uma classe de teste marcada com [TestClass] é executado automaticamente quando o teste de unidade é invocado.
Adicione o projeto de teste à solução.
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Adicionar uma referência de projeto
Para que o projeto de teste funcione com a StringLibrary
classe, adicione uma referência no StringLibraryTest
projeto ao StringLibrary
projeto.
Execute o seguinte comando:
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Adicionar e executar métodos de teste de unidade
Quando o Visual Studio invoca um teste de unidade, ele executa cada método marcado com o atributo em uma classe marcada com o TestMethodAttributeTestClassAttribute atributo. Um método de teste termina quando a primeira falha é encontrada ou quando todos os testes contidos no método foram bem-sucedidos.
Os testes mais comuns chamam membros da Assert classe. Muitos métodos de afirmação incluem pelo menos dois parâmetros, um dos quais é o resultado esperado do teste e o outro é o resultado real do teste. Alguns dos métodos mais frequentemente chamados da Assert
classe são mostrados na tabela a seguir:
Métodos de afirmação | Function |
---|---|
Assert.AreEqual |
Verifica se dois valores ou objetos são iguais. A declaração falhará se os valores ou objetos não forem iguais. |
Assert.AreSame |
Verifica se duas variáveis de objeto se referem ao mesmo objeto. A asserção falhará se as variáveis se referirem a objetos diferentes. |
Assert.IsFalse |
Verifica se uma condição é false . A asserção falhará se a condição for true . |
Assert.IsNotNull |
Verifica se um objeto não null é . A declaração falhará se o objeto for null . |
Você também pode usar o método em um método de teste para indicar o Assert.ThrowsException tipo de exceção que se espera que ele lance. O teste falhará se a exceção especificada não for lançada.
Ao testar o StringLibrary.StartsWithUpper
método, você deseja fornecer várias cadeias de caracteres que começam com um caractere maiúsculo. Você espera que o método retorne true
nesses casos, para que você possa chamar o Assert.IsTrue método. Da mesma forma, você deseja fornecer várias cadeias de caracteres que começam com algo diferente de um caractere maiúsculo. Você espera que o método retorne false
nesses casos, para que você possa chamar o Assert.IsFalse método.
Como seu método de biblioteca lida com cadeias de caracteres, você também deseja certificar-se de que ele manipula com êxito uma cadeia de caracteres vazia (String.Empty
) e uma null
cadeia de caracteres. Uma cadeia de caracteres vazia é aquela que não tem caracteres e cuja Length é 0. Uma null
cadeia de caracteres é aquela que não foi inicializada. Você pode chamar StartsWithUpper
diretamente como um método estático e passar um único String argumento. Ou você pode chamar StartsWithUpper
como um método de extensão em uma string
variável atribuída a null
.
Você definirá três métodos, cada um dos quais chama um Assert método para cada elemento em uma matriz de cadeia de caracteres. Você chamará uma sobrecarga de método que permite especificar uma mensagem de erro a ser exibida em caso de falha no teste. A mensagem identifica a cadeia de caracteres que causou a falha.
Para criar os métodos de teste:
Abra StringLibraryTest/UnitTest1.cs e substitua todo o código pelo código a seguir.
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '{0}': true; Actual: {1}", word, result)); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word, result)); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = { string.Empty, null }; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, result)); } } }
O teste de caracteres maiúsculos
TestStartsWithUpper
no método inclui a letra maiúscula grega alfa (U+0391) e a letra maiúscula cirílica EM (U+041C). O teste de caracteres minúsculosTestDoesNotStartWithUpper
no método inclui a letra pequena grega alfa (U+03B1) e a letra pequena cirílica Ghe (U+0433).Guardar as suas alterações.
Execute os testes:
dotnet test StringLibraryTest/StringLibraryTest.csproj
A saída do terminal mostra que todos os testes foram aprovados.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net7.0)
Lidar com falhas de teste
Se você estiver fazendo desenvolvimento orientado a testes (TDD), você escreve testes primeiro e eles falham na primeira vez que você os executa. Em seguida, você adiciona código ao aplicativo que faz o teste ser bem-sucedido. Para este tutorial, você criou o teste depois de escrever o código do aplicativo que ele valida, para que você não tenha visto o teste falhar. Para validar que um teste falha quando você espera que ele falhe, adicione um valor inválido à entrada de teste.
Modifique a
words
TestDoesNotStartWithUpper
matriz no método para incluir a cadeia de caracteres "Error".string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Execute os testes:
dotnet test StringLibraryTest/StringLibraryTest.csproj
A saída do terminal mostra que um teste falha e fornece uma mensagem de erro para o teste com falha: "Assert.IsFalse falhou. Esperado para 'Erro': false; atual: Verdadeiro". Devido à falha, nenhuma cadeia de caracteres na matriz após "Error" foi testada.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
Remova a cadeia de caracteres "Erro" que você adicionou na etapa 1. Execute novamente o teste e os testes são aprovados.
Testar a versão Release da biblioteca
Agora que todos os testes passaram ao executar a compilação Debug da biblioteca, execute os testes um tempo adicional em relação à compilação Release da biblioteca. Vários fatores, incluindo otimizações do compilador, às vezes podem produzir um comportamento diferente entre as compilações Debug e Release.
Execute os testes com a configuração de compilação da versão:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Os testes são aprovados.
Testes de depuração
Se você estiver usando o Visual Studio Code como seu IDE, poderá usar o mesmo processo mostrado em Depurar um aplicativo de console .NET usando o Visual Studio Code para depurar o código usando seu projeto de teste de unidade. Em vez de iniciar o projeto do aplicativo ShowCase , abra StringLibraryTest/UnitTest1.cs e selecione Depurar todos os testes entre as linhas 7 e 8. Se você não conseguir encontrá-lo, pressione Ctrl+Shift+P para abrir a paleta de comandos e digite Recarregar janela.
O Visual Studio Code inicia o projeto de teste com o depurador anexado. A execução será interrompida em qualquer ponto de interrupção que você adicionou ao projeto de teste ou ao código da biblioteca subjacente.
Recursos adicionais
Próximos passos
Neste tutorial, você testou uma biblioteca de classes. Você pode disponibilizar a biblioteca para outras pessoas publicando-a no NuGet como um pacote. Para saber como, siga um tutorial do NuGet:
Se você publicar uma biblioteca como um pacote NuGet, outras pessoas poderão instalá-la e usá-la. Para saber como, siga um tutorial do NuGet:
Uma biblioteca não precisa ser distribuída como um pacote. Ele pode ser empacotado com um aplicativo de console que o usa. Para saber como publicar um aplicativo de console, consulte o tutorial anterior desta série:
Este tutorial mostra como automatizar o teste de unidade adicionando um projeto de teste a uma solução.
Pré-requisitos
- Este tutorial funciona com a solução que você cria em Criar uma biblioteca de classes .NET usando o Visual Studio Code.
Criar um projeto de teste de unidade
Os testes de unidade fornecem testes automatizados de software durante o desenvolvimento e a publicação. A estrutura de teste que você usa neste tutorial é MSTest. MSTest é uma das três estruturas de teste que você pode escolher. Os outros são xUnit e nUnit.
Inicie o Visual Studio Code.
Abra a solução que você criou em Criar uma biblioteca de classes .NET usando o
ClassLibraryProjects
Visual Studio Code.Crie um projeto de teste de unidade chamado "StringLibraryTest".
dotnet new mstest -f net6.0 -o StringLibraryTest
O
-f net6.0
comando altera a estrutura de destino padrão paranet6.0
a versão.O
-o
comando or--output
especifica o local para colocar a saída gerada.O modelo de projeto cria um arquivo UnitTest1.cs com o seguinte código:
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
O código-fonte criado pelo modelo de teste de unidade faz o seguinte:
- Ele importa o Microsoft.VisualStudio.TestTools.UnitTesting namespace, que contém os tipos usados para teste de unidade.
- Ele aplica o TestClassAttribute atributo à
UnitTest1
classe. - Ele aplica o TestMethodAttribute atributo para definir
TestMethod1
.
Cada método marcado com [TestMethod] em uma classe de teste marcada com [TestClass] é executado automaticamente quando o teste de unidade é invocado.
Adicione o projeto de teste à solução.
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Adicionar uma referência de projeto
Para que o projeto de teste funcione com a StringLibrary
classe, adicione uma referência no StringLibraryTest
projeto ao StringLibrary
projeto.
Execute o seguinte comando:
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Adicionar e executar métodos de teste de unidade
Quando o Visual Studio invoca um teste de unidade, ele executa cada método marcado com o atributo em uma classe marcada com o TestMethodAttributeTestClassAttribute atributo. Um método de teste termina quando a primeira falha é encontrada ou quando todos os testes contidos no método foram bem-sucedidos.
Os testes mais comuns chamam membros da Assert classe. Muitos métodos de afirmação incluem pelo menos dois parâmetros, um dos quais é o resultado esperado do teste e o outro é o resultado real do teste. Alguns dos métodos mais frequentemente chamados da Assert
classe são mostrados na tabela a seguir:
Métodos de afirmação | Function |
---|---|
Assert.AreEqual |
Verifica se dois valores ou objetos são iguais. A declaração falhará se os valores ou objetos não forem iguais. |
Assert.AreSame |
Verifica se duas variáveis de objeto se referem ao mesmo objeto. A asserção falhará se as variáveis se referirem a objetos diferentes. |
Assert.IsFalse |
Verifica se uma condição é false . A asserção falhará se a condição for true . |
Assert.IsNotNull |
Verifica se um objeto não null é . A declaração falhará se o objeto for null . |
Você também pode usar o método em um método de teste para indicar o Assert.ThrowsException tipo de exceção que se espera que ele lance. O teste falhará se a exceção especificada não for lançada.
Ao testar o StringLibrary.StartsWithUpper
método, você deseja fornecer várias cadeias de caracteres que começam com um caractere maiúsculo. Você espera que o método retorne true
nesses casos, para que você possa chamar o Assert.IsTrue método. Da mesma forma, você deseja fornecer várias cadeias de caracteres que começam com algo diferente de um caractere maiúsculo. Você espera que o método retorne false
nesses casos, para que você possa chamar o Assert.IsFalse método.
Como seu método de biblioteca lida com cadeias de caracteres, você também deseja certificar-se de que ele manipula com êxito uma cadeia de caracteres vazia (String.Empty
) e uma null
cadeia de caracteres. Uma cadeia de caracteres vazia é aquela que não tem caracteres e cuja Length é 0. Uma null
cadeia de caracteres é aquela que não foi inicializada. Você pode chamar StartsWithUpper
diretamente como um método estático e passar um único String argumento. Ou você pode chamar StartsWithUpper
como um método de extensão em uma string
variável atribuída a null
.
Você definirá três métodos, cada um dos quais chama um Assert método para cada elemento em uma matriz de cadeia de caracteres. Você chamará uma sobrecarga de método que permite especificar uma mensagem de erro a ser exibida em caso de falha no teste. A mensagem identifica a cadeia de caracteres que causou a falha.
Para criar os métodos de teste:
Abra StringLibraryTest/UnitTest1.cs e substitua todo o código pelo código a seguir.
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '{0}': true; Actual: {1}", word, result)); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word, result)); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = { string.Empty, null }; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, result)); } } }
O teste de caracteres maiúsculos
TestStartsWithUpper
no método inclui a letra maiúscula grega alfa (U+0391) e a letra maiúscula cirílica EM (U+041C). O teste de caracteres minúsculosTestDoesNotStartWithUpper
no método inclui a letra pequena grega alfa (U+03B1) e a letra pequena cirílica Ghe (U+0433).Guardar as suas alterações.
Execute os testes:
dotnet test StringLibraryTest/StringLibraryTest.csproj
A saída do terminal mostra que todos os testes foram aprovados.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net6.0)
Lidar com falhas de teste
Se você estiver fazendo desenvolvimento orientado a testes (TDD), você escreve testes primeiro e eles falham na primeira vez que você os executa. Em seguida, você adiciona código ao aplicativo que faz o teste ser bem-sucedido. Para este tutorial, você criou o teste depois de escrever o código do aplicativo que ele valida, para que você não tenha visto o teste falhar. Para validar que um teste falha quando você espera que ele falhe, adicione um valor inválido à entrada de teste.
Modifique a
words
TestDoesNotStartWithUpper
matriz no método para incluir a cadeia de caracteres "Error".string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Execute os testes:
dotnet test StringLibraryTest/StringLibraryTest.csproj
A saída do terminal mostra que um teste falha e fornece uma mensagem de erro para o teste com falha: "Assert.IsFalse falhou. Esperado para 'Erro': false; atual: Verdadeiro". Devido à falha, nenhuma cadeia de caracteres na matriz após "Error" foi testada.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
Remova a cadeia de caracteres "Erro" que você adicionou na etapa 1. Execute novamente o teste e os testes são aprovados.
Testar a versão Release da biblioteca
Agora que todos os testes passaram ao executar a compilação Debug da biblioteca, execute os testes um tempo adicional em relação à compilação Release da biblioteca. Vários fatores, incluindo otimizações do compilador, às vezes podem produzir um comportamento diferente entre as compilações Debug e Release.
Execute os testes com a configuração de compilação da versão:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Os testes são aprovados.
Testes de depuração
Se você estiver usando o Visual Studio Code como seu IDE, poderá usar o mesmo processo mostrado em Depurar um aplicativo de console .NET usando o Visual Studio Code para depurar o código usando seu projeto de teste de unidade. Em vez de iniciar o projeto do aplicativo ShowCase , abra StringLibraryTest/UnitTest1.cs e selecione Depurar todos os testes entre as linhas 7 e 8. Se você não conseguir encontrá-lo, pressione Ctrl+Shift+P para abrir a paleta de comandos e digite Recarregar janela.
O Visual Studio Code inicia o projeto de teste com o depurador anexado. A execução será interrompida em qualquer ponto de interrupção que você adicionou ao projeto de teste ou ao código da biblioteca subjacente.
Recursos adicionais
Próximos passos
Neste tutorial, você testou uma biblioteca de classes. Você pode disponibilizar a biblioteca para outras pessoas publicando-a no NuGet como um pacote. Para saber como, siga um tutorial do NuGet:
Se você publicar uma biblioteca como um pacote NuGet, outras pessoas poderão instalá-la e usá-la. Para saber como, siga um tutorial do NuGet:
Uma biblioteca não precisa ser distribuída como um pacote. Ele pode ser empacotado com um aplicativo de console que o usa. Para saber como publicar um aplicativo de console, consulte o tutorial anterior desta série: