Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial se muestra cómo crear una solución que contenga un proyecto de prueba unitaria y un proyecto de biblioteca. Para seguir el tutorial mediante una solución pregenerada, vea o descargue el código de ejemplo. Para obtener instrucciones de descarga, consulte Ejemplos y tutoriales.
Creación de la solución
En esta sección, se crea una solución que contiene los proyectos de origen y prueba. La solución completada tiene la siguiente estructura de directorios:
/unit-testing-using-dotnet-test
unit-testing-using-dotnet-test.sln
/PrimeService
PrimeService.vb
PrimeService.vbproj
/PrimeService.Tests
PrimeService_IsPrimeShould.vb
PrimeServiceTests.vbproj
En las instrucciones siguientes se proporcionan los pasos para crear la solución de prueba. Consulte Comandos para crear una solución de prueba para obtener instrucciones para crear la solución de prueba en un paso.
Abra una ventana de terminal.
Ejecute el siguiente comando:
dotnet new sln -o unit-testing-using-dotnet-test
El
dotnet new sln
comando crea una nueva solución en el directorio unit-testing-using-dotnet-test .Cambie el directorio a la carpeta unit-testing-using-dotnet-test .
Ejecute el siguiente comando:
dotnet new classlib -o PrimeService -lang VB
El
dotnet new classlib
comando crea un nuevo proyecto de biblioteca de clases en la carpeta PrimeService . La nueva biblioteca de clases contendrá el código que se va a probar.Cambie el nombre de Class1.vb a PrimeService.vb.
Reemplace el código de PrimeService.vb por el código siguiente:
Imports System Namespace Prime.Services Public Class PrimeService Public Function IsPrime(candidate As Integer) As Boolean Throw New NotImplementedException("Not implemented.") End Function End Class End Namespace
El código anterior:
- Lanza un NotImplementedException con un mensaje que indica que no está implementado.
- Se actualiza más adelante en el tutorial.
En el directorio unit-testing-using-dotnet-test , ejecute el siguiente comando para agregar el proyecto de biblioteca de clases a la solución:
dotnet sln add ./PrimeService/PrimeService.vbproj
Para crear el proyecto PrimeService.Tests , ejecute el siguiente comando:
dotnet new xunit -o PrimeService.Tests -lang VB
El comando anterior:
- Crea el proyecto PrimeService.Tests en el directorio PrimeService.Tests . El proyecto de prueba usa xUnit como biblioteca de pruebas.
- Configura el ejecutor de pruebas agregando los siguientes
<PackageReference />
elementos al archivo del proyecto:- "Microsoft.NET.Test.Sdk"
- "xunit"
- "xunit.runner.visualstudio"
Para agregar el proyecto de prueba al archivo de solución, ejecute el siguiente comando:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Agregue la
PrimeService
biblioteca de clases como dependencia al proyecto PrimeService.Tests :dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
Comandos para crear la solución
En esta sección se resumen todos los comandos de la sección anterior. Omita esta sección si ha completado los pasos de la sección anterior.
Los comandos siguientes crean la solución de prueba en una máquina Windows. Para macOS y Unix, actualice el comando ren
a la versión del sistema operativo ren
para renombrar un archivo:
dotnet new sln -o unit-testing-using-dotnet-test
cd unit-testing-using-dotnet-test
dotnet new classlib -o PrimeService
ren .\PrimeService\Class1.vb PrimeService.vb
dotnet sln add ./PrimeService/PrimeService.vbproj
dotnet new xunit -o PrimeService.Tests -lang VB
dotnet add ./PrimeService.Tests/PrimeService.Tests.vbproj reference ./PrimeService/PrimeService.vbproj
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
Siga las instrucciones para "Reemplazar el código de PrimeService.vb por el código siguiente" en la sección anterior.
Crear una prueba
Un enfoque popular en el desarrollo controlado por pruebas (TDD) es escribir una prueba antes de implementar el código de destino. En este tutorial se usa el enfoque de TDD. El IsPrime
método se puede llamar, pero no se implementa. Una llamada de prueba a IsPrime
falla. Con TDD, se escribe una prueba a sabiendas de que en esta se produce un error. El código de destino se actualiza para asegurar que la prueba pase. Sigue repitiendo este enfoque, escribiendo una prueba fallida y luego actualizando el código objetivo para que pase.
Actualice el proyecto PrimeService.Tests :
- Elimine PrimeService.Tests/UnitTest1.vb.
- Cree un archivo PrimeService.Tests/PrimeService_IsPrimeShould.vb .
- Reemplace el código de PrimeService_IsPrimeShould.vb por el código siguiente:
Imports Xunit
Namespace PrimeService.Tests
Public Class PrimeService_IsPrimeShould
Private ReadOnly _primeService As Prime.Services.PrimeService
Public Sub New()
_primeService = New Prime.Services.PrimeService()
End Sub
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
End Class
End Namespace
El [Fact]
atributo declara un método de prueba que ejecuta el ejecutor de pruebas. En la carpeta PrimeService.Tests , ejecute dotnet test
. El comando dotnet test compila los proyectos y ejecuta las pruebas. El ejecutor de pruebas xUnit contiene el punto de entrada del programa para ejecutar las pruebas.
dotnet test
inicia el ejecutor de pruebas con el proyecto de prueba unitaria.
Se produce un error en la prueba porque IsPrime
no se ha implementado. Con el enfoque de TDD, escriba solo código suficiente para que esta prueba pase. Actualice IsPrime
con el siguiente código:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Not implemented.")
End Function
Ejecute dotnet test
. Se supera la prueba.
Incorporación de más pruebas
Agregue pruebas de número primo para 0 y -1. Puede copiar la prueba anterior y cambiar el código siguiente para usar 0 y -1:
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
Copiar código de prueba cuando solo un parámetro cambia da como resultado la duplicación de código y el sobredimensionamiento de pruebas. Los siguientes atributos xUnit permiten escribir un conjunto de pruebas similares:
-
[Theory]
representa un conjunto de pruebas que ejecutan el mismo código, pero tienen argumentos de entrada diferentes. -
[InlineData]
atributo especifica valores para esas entradas.
En lugar de crear nuevas pruebas, aplique los atributos xUnit anteriores para crear una sola teoría. Reemplace el código siguiente:
<Fact>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.False(result, "1 should not be prime")
End Sub
con el siguiente código:
<Theory>
<InlineData(-1)>
<InlineData(0)>
<InlineData(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(ByVal value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.False(result, $"{value} should not be prime")
End Sub
En el código anterior, [Theory]
y [InlineData]
habilite la prueba de varios valores inferiores a dos. Dos es el número primo más pequeño.
Ejecute dotnet test
, dos de las pruebas producirán un error. Para que se superen todas las pruebas, actualice el IsPrime
método con el código siguiente:
Public Function IsPrime(candidate As Integer) As Boolean
If candidate < 2 Then
Return False
End If
Throw New NotImplementedException("Not fully implemented.")
End Function
Después del enfoque de TDD, agregue más pruebas con errores y actualice el código de destino. Consulte la versión finalizada de las pruebas y la implementación completa de la biblioteca.
El método completado IsPrime
no es un algoritmo eficaz para probar primalidad.