Tutorial: Prueba de una biblioteca de clases de .NET con Visual Studio Code
En este tutorial se muestra cómo automatizar las pruebas unitarias mediante la adición de un proyecto de prueba a una solución.
Requisitos previos
- Este tutorial funciona con la solución que se crea en Creación de una biblioteca de clases de .NET con Visual Studio Code.
Crear un proyecto de prueba unitaria
Las pruebas unitarias proporcionan pruebas de software automatizadas durante el desarrollo y la publicación. El marco de trabajo de pruebas que se usa en este tutorial es MSTest. MSTest es uno de los tres marcos de pruebas que puede elegir. Los otros son xUnit y nUnit.
Inicie Visual Studio Code.
Abra la solución
ClassLibraryProjects
que ha creado en Creación de una biblioteca de clases de .NET con Visual Studio Code.Cree un proyecto de prueba unitaria denominado "StringLibraryTest".
dotnet new mstest -o StringLibraryTest
La plantilla de proyecto crea un archivo UnitTest1.cs con el código siguiente:
namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } }
El código fuente creado por la plantilla de prueba unitaria hace lo siguiente:
- Aplica el atributo TestClassAttribute a la clase
UnitTest1
. - Aplica el atributo TestMethodAttribute para definir
TestMethod1
. - Importa el espacio de nombres de Microsoft.VisualStudio.TestTools.UnitTesting, que contiene los tipos utilizados para las pruebas unitarias. El espacio de nombres se importa mediante una directiva
global using
en GlobalUsings.cs.
Cada método etiquetado con [TestMethod] en una clase de prueba etiquetada con [TestClass] se ejecuta automáticamente cuando se invoca la prueba unitaria.
- Aplica el atributo TestClassAttribute a la clase
Agregue el proyecto de prueba a la solución:
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Agregar una referencia de proyecto
Para que el proyecto de prueba funcione con la clase StringLibrary
, agregue una referencia del proyecto StringLibraryTest
al proyecto StringLibrary
.
Ejecute el siguiente comando:
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Adición y ejecución de métodos de prueba unitaria
Cuando Visual Studio invoca una prueba unitaria, ejecuta cada método marcado con el atributo TestMethodAttribute en una clase que está marcada con el atributo TestClassAttribute. Un método de prueba finaliza cuando se encuentra el primer error, o cuando todas las pruebas contenidas en el método se han realizado correctamente.
Las pruebas más comunes llaman a los miembros de la clase Assert. Muchos métodos de aserción incluyen al menos dos parámetros, uno de los cuales es el resultado esperado de la prueba y el otro es el resultado real de la prueba. Algunos de los métodos Assert
a los que se llama con más frecuencia se muestran en la tabla siguiente:
Métodos de aserción | Función |
---|---|
Assert.AreEqual |
Comprueba que dos valores u objetos son iguales. La aserción da error si los valores o los objetos no son iguales. |
Assert.AreSame |
Comprueba que dos variables de objeto hacen referencia al mismo objeto. La aserción da error si las variables hacen referencia a objetos diferentes. |
Assert.IsFalse |
Comprueba si una condición es false . La aserción produce un error si la condición es true . |
Assert.IsNotNull |
Comprueba que un objeto no es null . La aserción da error si el objeto es null . |
También puede usar el método Assert.ThrowsException en un método de prueba para indicar el tipo de excepción que se espera que produzca. La prueba dará error si no se inicia la excepción especificada.
Al probar el método StringLibrary.StartsWithUpper
, quiere proporcionar un número de cadenas que comiencen con un carácter en mayúsculas. Espera que el método devuelva true
en estos casos, por lo que puede llamar al método Assert.IsTrue. Del mismo modo, quiere proporcionar un número de cadenas que comiencen con algo que no sea un carácter en mayúsculas. Espera que el método devuelva false
en estos casos, por lo que puede llamar al método Assert.IsFalse.
Como el método de biblioteca controla cadenas, también se recomienda asegurarse de que controla correctamente una cadena vacía (String.Empty
) y una cadena null
. Una cadena vacía es aquella que no tiene ningún carácter y cuyo valor de Length es 0. Una cadena null
es aquella que no se ha inicializado. Se puede llamar a StartsWithUpper
directamente como un método estático y pasar un argumento String único. También puede llamar a StartsWithUpper
como método de extensión en una variable de string
asignada a null
.
Definirá tres métodos, cada uno de los cuales llama a un método Assert para cada elemento de una matriz de cadenas. Llamará a una sobrecarga de método que le permite especificar que se muestre un mensaje de error en caso de error en la prueba. El mensaje identifica la cadena que causó el error.
Para crear los métodos de prueba:
Abra StringLibraryTest/UnitTest1.cs y reemplace todo el código por el siguiente.
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)); } } }
La prueba de caracteres en mayúsculas en el método
TestStartsWithUpper
incluye la letra mayúscula griega alfa (U + 0391) y la letra mayúscula cirílica EM (U + 041C). La prueba de caracteres en minúsculas en el métodoTestDoesNotStartWithUpper
incluye la letra griega minúscula alfa (U + 03B1) y la letra cirílica minúscula Ghe (U + 0433).Guarde los cambios.
Ejecute las pruebas:
dotnet test StringLibraryTest/StringLibraryTest.csproj
en la salida del terminal se indica que se han superado todas las pruebas.
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)
Administración de errores de prueba
Si está realizando el desarrollo controlado por pruebas (TDD), escribirá las pruebas, y estas generarán un error cuando las ejecute por primera vez. Después, agregará un código a la aplicación para que la prueba se realice correctamente. En este tutorial, ha creado la prueba después de escribir el código de la aplicación que valida, por lo que no ha podido comprobar si la prueba genera un error. Para asegurarse de que una prueba genera un error cuando espera que lo haga, agregue un valor no válido a la entrada de prueba.
Modifique la matriz
words
en el métodoTestDoesNotStartWithUpper
para incluir la cadena "Error".string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Ejecute las pruebas:
dotnet test StringLibraryTest/StringLibraryTest.csproj
en la salida del terminal se indica que una de las pruebas no se supera y se proporciona un mensaje de error al respecto: "Error de Assert.IsFalse. Se esperaba para "Error": false; real: True". Debido al error, no se probaron todas las cadenas de la matriz después de "Error".
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)
Quite la cadena "Error" que agregó en el paso 1. Vuelva a ejecutar la prueba y se superarán las pruebas.
Prueba de la versión de la biblioteca
Ahora que se han superado todas las pruebas al ejecutar la versión de depuración de la biblioteca, ejecute las pruebas una vez más con la versión de lanzamiento de la biblioteca. Varios factores, como las optimizaciones del compilador, a veces pueden producir un comportamiento diferente entre las compilaciones de depuración y versión.
Ejecute las pruebas con la configuración de compilación Versión:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Las pruebas se superan.
Depuración de pruebas
Si usa Visual Studio Code como IDE, puede utilizar el mismo proceso que se muestra en Tutorial: Depuración de una aplicación de consola de .NET con Visual Studio Code para depurar código mediante el proyecto de prueba unitaria. En lugar de iniciar el proyecto de aplicación Showcase, abra StringLibraryTest/UnitTest1.cs y seleccione Depurar todas las pruebas entre las líneas 7 y 8. Si no puede encontrarlo, presione Ctrl+Mayús+P para abrir la paleta de comandos y escriba Recargar ventana.
Visual Studio Code inicia el proyecto de prueba con el depurador asociado. La ejecución se detendrá en cualquier punto de interrupción que haya agregado al proyecto de prueba o al código de la biblioteca subyacente.
Recursos adicionales
Pasos siguientes
En este tutorial, ha realizado una prueba unitaria de una biblioteca de clases. Puede poner la biblioteca a disposición de otros usuarios si la publica en NuGet como un paquete. Para obtener información sobre cómo hacerlo, realice este tutorial de NuGet:
Si publica una biblioteca como un paquete NuGet, otros usuarios pueden instalarla y usarla. Para obtener información sobre cómo hacerlo, realice este tutorial de NuGet:
No es necesario distribuir una biblioteca como un paquete. Se puede agrupar con una aplicación de consola que la use. Para aprender a publicar una aplicación de consola, vea el tutorial anterior de esta serie:
El kit de desarrollo de C# de la extensión de Visual Studio Code proporciona más herramientas para desarrollar aplicaciones y bibliotecas de C#:
En este tutorial se muestra cómo automatizar las pruebas unitarias mediante la adición de un proyecto de prueba a una solución.
Requisitos previos
- Este tutorial funciona con la solución que se crea en Creación de una biblioteca de clases de .NET con Visual Studio Code.
Crear un proyecto de prueba unitaria
Las pruebas unitarias proporcionan pruebas de software automatizadas durante el desarrollo y la publicación. El marco de trabajo de pruebas que se usa en este tutorial es MSTest. MSTest es uno de los tres marcos de pruebas que puede elegir. Los otros son xUnit y nUnit.
Inicie Visual Studio Code.
Abra la solución
ClassLibraryProjects
que ha creado en Creación de una biblioteca de clases de .NET con Visual Studio Code.Cree un proyecto de prueba unitaria denominado "StringLibraryTest".
dotnet new mstest -o StringLibraryTest
La plantilla de proyecto crea un archivo UnitTest1.cs con el código siguiente:
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
El código fuente creado por la plantilla de prueba unitaria hace lo siguiente:
- Importa el espacio de nombres de Microsoft.VisualStudio.TestTools.UnitTesting, que contiene los tipos utilizados para las pruebas unitarias.
- Aplica el atributo TestClassAttribute a la clase
UnitTest1
. - Aplica el atributo TestMethodAttribute para definir
TestMethod1
.
Cada método etiquetado con [TestMethod] en una clase de prueba etiquetada con [TestClass] se ejecuta automáticamente cuando se invoca la prueba unitaria.
Agregue el proyecto de prueba a la solución:
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Agregar una referencia de proyecto
Para que el proyecto de prueba funcione con la clase StringLibrary
, agregue una referencia del proyecto StringLibraryTest
al proyecto StringLibrary
.
Ejecute el siguiente comando:
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Adición y ejecución de métodos de prueba unitaria
Cuando Visual Studio invoca una prueba unitaria, ejecuta cada método marcado con el atributo TestMethodAttribute en una clase que está marcada con el atributo TestClassAttribute. Un método de prueba finaliza cuando se encuentra el primer error, o cuando todas las pruebas contenidas en el método se han realizado correctamente.
Las pruebas más comunes llaman a los miembros de la clase Assert. Muchos métodos de aserción incluyen al menos dos parámetros, uno de los cuales es el resultado esperado de la prueba y el otro es el resultado real de la prueba. Algunos de los métodos Assert
a los que se llama con más frecuencia se muestran en la tabla siguiente:
Métodos de aserción | Función |
---|---|
Assert.AreEqual |
Comprueba que dos valores u objetos son iguales. La aserción da error si los valores o los objetos no son iguales. |
Assert.AreSame |
Comprueba que dos variables de objeto hacen referencia al mismo objeto. La aserción da error si las variables hacen referencia a objetos diferentes. |
Assert.IsFalse |
Comprueba si una condición es false . La aserción produce un error si la condición es true . |
Assert.IsNotNull |
Comprueba que un objeto no es null . La aserción da error si el objeto es null . |
También puede usar el método Assert.ThrowsException en un método de prueba para indicar el tipo de excepción que se espera que produzca. La prueba dará error si no se inicia la excepción especificada.
Al probar el método StringLibrary.StartsWithUpper
, quiere proporcionar un número de cadenas que comiencen con un carácter en mayúsculas. Espera que el método devuelva true
en estos casos, por lo que puede llamar al método Assert.IsTrue. Del mismo modo, quiere proporcionar un número de cadenas que comiencen con algo que no sea un carácter en mayúsculas. Espera que el método devuelva false
en estos casos, por lo que puede llamar al método Assert.IsFalse.
Como el método de biblioteca controla cadenas, también se recomienda asegurarse de que controla correctamente una cadena vacía (String.Empty
) y una cadena null
. Una cadena vacía es aquella que no tiene ningún carácter y cuyo valor de Length es 0. Una cadena null
es aquella que no se ha inicializado. Se puede llamar a StartsWithUpper
directamente como un método estático y pasar un argumento String único. También puede llamar a StartsWithUpper
como método de extensión en una variable de string
asignada a null
.
Definirá tres métodos, cada uno de los cuales llama a un método Assert para cada elemento de una matriz de cadenas. Llamará a una sobrecarga de método que le permite especificar que se muestre un mensaje de error en caso de error en la prueba. El mensaje identifica la cadena que causó el error.
Para crear los métodos de prueba:
Abra StringLibraryTest/UnitTest1.cs y reemplace todo el código por el siguiente.
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)); } } }
La prueba de caracteres en mayúsculas en el método
TestStartsWithUpper
incluye la letra mayúscula griega alfa (U + 0391) y la letra mayúscula cirílica EM (U + 041C). La prueba de caracteres en minúsculas en el métodoTestDoesNotStartWithUpper
incluye la letra griega minúscula alfa (U + 03B1) y la letra cirílica minúscula Ghe (U + 0433).Guarde los cambios.
Ejecute las pruebas:
dotnet test StringLibraryTest/StringLibraryTest.csproj
en la salida del terminal se indica que se han superado todas las pruebas.
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)
Administración de errores de prueba
Si está realizando el desarrollo controlado por pruebas (TDD), escribirá las pruebas, y estas generarán un error cuando las ejecute por primera vez. Después, agregará un código a la aplicación para que la prueba se realice correctamente. En este tutorial, ha creado la prueba después de escribir el código de la aplicación que valida, por lo que no ha podido comprobar si la prueba genera un error. Para asegurarse de que una prueba genera un error cuando espera que lo haga, agregue un valor no válido a la entrada de prueba.
Modifique la matriz
words
en el métodoTestDoesNotStartWithUpper
para incluir la cadena "Error".string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Ejecute las pruebas:
dotnet test StringLibraryTest/StringLibraryTest.csproj
en la salida del terminal se indica que una de las pruebas no se supera y se proporciona un mensaje de error al respecto: "Error de Assert.IsFalse. Se esperaba para "Error": false; real: True". Debido al error, no se probaron todas las cadenas de la matriz después de "Error".
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)
Quite la cadena "Error" que agregó en el paso 1. Vuelva a ejecutar la prueba y se superarán las pruebas.
Prueba de la versión de la biblioteca
Ahora que se han superado todas las pruebas al ejecutar la versión de depuración de la biblioteca, ejecute las pruebas una vez más con la versión de lanzamiento de la biblioteca. Varios factores, como las optimizaciones del compilador, a veces pueden producir un comportamiento diferente entre las compilaciones de depuración y versión.
Ejecute las pruebas con la configuración de compilación Versión:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Las pruebas se superan.
Depuración de pruebas
Si usa Visual Studio Code como IDE, puede utilizar el mismo proceso que se muestra en Tutorial: Depuración de una aplicación de consola de .NET con Visual Studio Code para depurar código mediante el proyecto de prueba unitaria. En lugar de iniciar el proyecto de aplicación Showcase, abra StringLibraryTest/UnitTest1.cs y seleccione Depurar todas las pruebas entre las líneas 7 y 8. Si no puede encontrarlo, presione Ctrl+Mayús+P para abrir la paleta de comandos y escriba Recargar ventana.
Visual Studio Code inicia el proyecto de prueba con el depurador asociado. La ejecución se detendrá en cualquier punto de interrupción que haya agregado al proyecto de prueba o al código de la biblioteca subyacente.
Recursos adicionales
Pasos siguientes
En este tutorial, ha realizado una prueba unitaria de una biblioteca de clases. Puede poner la biblioteca a disposición de otros usuarios si la publica en NuGet como un paquete. Para obtener información sobre cómo hacerlo, realice este tutorial de NuGet:
Si publica una biblioteca como un paquete NuGet, otros usuarios pueden instalarla y usarla. Para obtener información sobre cómo hacerlo, realice este tutorial de NuGet:
No es necesario distribuir una biblioteca como un paquete. Se puede agrupar con una aplicación de consola que la use. Para aprender a publicar una aplicación de consola, vea el tutorial anterior de esta serie:
En este tutorial se muestra cómo automatizar las pruebas unitarias mediante la adición de un proyecto de prueba a una solución.
Requisitos previos
- Este tutorial funciona con la solución que se crea en Creación de una biblioteca de clases de .NET con Visual Studio Code.
Crear un proyecto de prueba unitaria
Las pruebas unitarias proporcionan pruebas de software automatizadas durante el desarrollo y la publicación. El marco de trabajo de pruebas que se usa en este tutorial es MSTest. MSTest es uno de los tres marcos de pruebas que puede elegir. Los otros son xUnit y nUnit.
Inicie Visual Studio Code.
Abra la solución
ClassLibraryProjects
que ha creado en Creación de una biblioteca de clases de .NET con Visual Studio Code.Cree un proyecto de prueba unitaria denominado "StringLibraryTest".
dotnet new mstest -f net6.0 -o StringLibraryTest
El comando
-f net6.0
cambia la plataforma de destino predeterminada a la versiónnet6.0
.El comando
-o
o--output
especifica la ubicación para colocar la salida generada.La plantilla de proyecto crea un archivo UnitTest1.cs con el código siguiente:
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
El código fuente creado por la plantilla de prueba unitaria hace lo siguiente:
- Importa el espacio de nombres de Microsoft.VisualStudio.TestTools.UnitTesting, que contiene los tipos utilizados para las pruebas unitarias.
- Aplica el atributo TestClassAttribute a la clase
UnitTest1
. - Aplica el atributo TestMethodAttribute para definir
TestMethod1
.
Cada método etiquetado con [TestMethod] en una clase de prueba etiquetada con [TestClass] se ejecuta automáticamente cuando se invoca la prueba unitaria.
Agregue el proyecto de prueba a la solución:
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Agregar una referencia de proyecto
Para que el proyecto de prueba funcione con la clase StringLibrary
, agregue una referencia del proyecto StringLibraryTest
al proyecto StringLibrary
.
Ejecute el siguiente comando:
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Adición y ejecución de métodos de prueba unitaria
Cuando Visual Studio invoca una prueba unitaria, ejecuta cada método marcado con el atributo TestMethodAttribute en una clase que está marcada con el atributo TestClassAttribute. Un método de prueba finaliza cuando se encuentra el primer error, o cuando todas las pruebas contenidas en el método se han realizado correctamente.
Las pruebas más comunes llaman a los miembros de la clase Assert. Muchos métodos de aserción incluyen al menos dos parámetros, uno de los cuales es el resultado esperado de la prueba y el otro es el resultado real de la prueba. Algunos de los métodos Assert
a los que se llama con más frecuencia se muestran en la tabla siguiente:
Métodos de aserción | Función |
---|---|
Assert.AreEqual |
Comprueba que dos valores u objetos son iguales. La aserción da error si los valores o los objetos no son iguales. |
Assert.AreSame |
Comprueba que dos variables de objeto hacen referencia al mismo objeto. La aserción da error si las variables hacen referencia a objetos diferentes. |
Assert.IsFalse |
Comprueba si una condición es false . La aserción produce un error si la condición es true . |
Assert.IsNotNull |
Comprueba que un objeto no es null . La aserción da error si el objeto es null . |
También puede usar el método Assert.ThrowsException en un método de prueba para indicar el tipo de excepción que se espera que produzca. La prueba dará error si no se inicia la excepción especificada.
Al probar el método StringLibrary.StartsWithUpper
, quiere proporcionar un número de cadenas que comiencen con un carácter en mayúsculas. Espera que el método devuelva true
en estos casos, por lo que puede llamar al método Assert.IsTrue. Del mismo modo, quiere proporcionar un número de cadenas que comiencen con algo que no sea un carácter en mayúsculas. Espera que el método devuelva false
en estos casos, por lo que puede llamar al método Assert.IsFalse.
Como el método de biblioteca controla cadenas, también se recomienda asegurarse de que controla correctamente una cadena vacía (String.Empty
) y una cadena null
. Una cadena vacía es aquella que no tiene ningún carácter y cuyo valor de Length es 0. Una cadena null
es aquella que no se ha inicializado. Se puede llamar a StartsWithUpper
directamente como un método estático y pasar un argumento String único. También puede llamar a StartsWithUpper
como método de extensión en una variable de string
asignada a null
.
Definirá tres métodos, cada uno de los cuales llama a un método Assert para cada elemento de una matriz de cadenas. Llamará a una sobrecarga de método que le permite especificar que se muestre un mensaje de error en caso de error en la prueba. El mensaje identifica la cadena que causó el error.
Para crear los métodos de prueba:
Abra StringLibraryTest/UnitTest1.cs y reemplace todo el código por el siguiente.
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)); } } }
La prueba de caracteres en mayúsculas en el método
TestStartsWithUpper
incluye la letra mayúscula griega alfa (U + 0391) y la letra mayúscula cirílica EM (U + 041C). La prueba de caracteres en minúsculas en el métodoTestDoesNotStartWithUpper
incluye la letra griega minúscula alfa (U + 03B1) y la letra cirílica minúscula Ghe (U + 0433).Guarde los cambios.
Ejecute las pruebas:
dotnet test StringLibraryTest/StringLibraryTest.csproj
en la salida del terminal se indica que se han superado todas las pruebas.
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)
Administración de errores de prueba
Si está realizando el desarrollo controlado por pruebas (TDD), escribirá las pruebas, y estas generarán un error cuando las ejecute por primera vez. Después, agregará un código a la aplicación para que la prueba se realice correctamente. En este tutorial, ha creado la prueba después de escribir el código de la aplicación que valida, por lo que no ha podido comprobar si la prueba genera un error. Para asegurarse de que una prueba genera un error cuando espera que lo haga, agregue un valor no válido a la entrada de prueba.
Modifique la matriz
words
en el métodoTestDoesNotStartWithUpper
para incluir la cadena "Error".string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Ejecute las pruebas:
dotnet test StringLibraryTest/StringLibraryTest.csproj
en la salida del terminal se indica que una de las pruebas no se supera y se proporciona un mensaje de error al respecto: "Error de Assert.IsFalse. Se esperaba para "Error": false; real: True". Debido al error, no se probaron todas las cadenas de la matriz después de "Error".
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)
Quite la cadena "Error" que agregó en el paso 1. Vuelva a ejecutar la prueba y se superarán las pruebas.
Prueba de la versión de la biblioteca
Ahora que se han superado todas las pruebas al ejecutar la versión de depuración de la biblioteca, ejecute las pruebas una vez más con la versión de lanzamiento de la biblioteca. Varios factores, como las optimizaciones del compilador, a veces pueden producir un comportamiento diferente entre las compilaciones de depuración y versión.
Ejecute las pruebas con la configuración de compilación Versión:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Las pruebas se superan.
Depuración de pruebas
Si usa Visual Studio Code como IDE, puede utilizar el mismo proceso que se muestra en Tutorial: Depuración de una aplicación de consola de .NET con Visual Studio Code para depurar código mediante el proyecto de prueba unitaria. En lugar de iniciar el proyecto de aplicación Showcase, abra StringLibraryTest/UnitTest1.cs y seleccione Depurar todas las pruebas entre las líneas 7 y 8. Si no puede encontrarlo, presione Ctrl+Mayús+P para abrir la paleta de comandos y escriba Recargar ventana.
Visual Studio Code inicia el proyecto de prueba con el depurador asociado. La ejecución se detendrá en cualquier punto de interrupción que haya agregado al proyecto de prueba o al código de la biblioteca subyacente.
Recursos adicionales
Pasos siguientes
En este tutorial, ha realizado una prueba unitaria de una biblioteca de clases. Puede poner la biblioteca a disposición de otros usuarios si la publica en NuGet como un paquete. Para obtener información sobre cómo hacerlo, realice este tutorial de NuGet:
Si publica una biblioteca como un paquete NuGet, otros usuarios pueden instalarla y usarla. Para obtener información sobre cómo hacerlo, realice este tutorial de NuGet:
No es necesario distribuir una biblioteca como un paquete. Se puede agrupar con una aplicación de consola que la use. Para aprender a publicar una aplicación de consola, vea el tutorial anterior de esta serie: