Pruebas unitarias con Visual Studio 2010–Unit Testing


Las pruebas unitarias me permite probar el correcto funcionamiento de un modulo, y con las pruebas de integración nos asegura el correcto funcionamiento del sistema.

Tengo una clase UsuarioDAO, la cual tiene un método Insert con tres parámetros.Los parámetros corresponden al código, login y password del usuario. La funcionalidad del método es registrar los datos de un usuario en la tabla TB_USUARIO. 

   1: Imports System.Data.SqlClient
   2:  
   3: Public Class UsuarioDAO
   4:  
   5:     Dim strCnx As String = "Server=(local)\SQL2008;Database=VentasDemo;Integrated Security=SSPI;"
   6:  
   7:     Public Function Insert(ByVal strCodUsu As String, ByVal strLogUsu As String, ByVal strPasUsu As String) As Boolean
   8:         Dim cnx As New SqlConnection(strCnx)
   9:         Dim cmd As New SqlCommand("Insert Into TB_Usuario Values(@Cod,@Log,@Pas)", cnx)
  10:  
  11:         cmd.Parameters.AddWithValue("@Cod", strCodUsu)
  12:         cmd.Parameters.AddWithValue("@Log", strLogUsu)
  13:         cmd.Parameters.AddWithValue("@Pas", strPasUsu)
  14:  
  15:         Try
  16:             cnx.Open()
  17:             If cmd.ExecuteNonQuery > 0 Then
  18:                 Return True
  19:             Else
  20:                 Return False
  21:             End If
  22:         Catch ex As Exception
  23:             Throw ex
  24:         Finally
  25:             cnx.Close()
  26:         End Try
  27:  
  28:     End Function
  29: End Class

El programa es simple, pero cumple el objetivo. Para probarlo tendría que crear una interface de usuario en Windows Form o WebForm, establecer los valores de los parámetros y esperar el valor TRUE indicándome que el registro se inserto. Aquí es donde hare uso del Unit Test, primero sobre la clases UsuarioDAO haga clic con el botón secundario (derecho) como se muestra:

image

Esta ventana nos muestra la relación de las clases y métodos que se van a testear:

image

Una vez aceptado (OK), ingreso el nombre del proyecto de tipo Test, “Test.Ventas.Access”:

image

La clase UsuarioDAOTest que se ha generado tiene el código necesario para ejecutar el método Insert de la clase UsuarioDAO:

   1: Imports Microsoft.VisualStudio.TestTools.UnitTesting
   2: Imports Ventas.DataAccess
   3:  
   4:  
   5: '''<summary>
   6: '''This is a test class for UsuarioDAOTest and is intended
   7: '''to contain all UsuarioDAOTest Unit Tests
   8: '''</summary>
   9: <TestClass()> _
  10: Public Class UsuarioDAOTest
  11:     Private testContextInstance As TestContext
  12:  
  13:     '''<summary>
  14:     '''Gets or sets the test context which provides
  15:     '''information about and functionality for the current test run.
  16:     '''</summary>
  17:     Public Property TestContext() As TestContext
  18:         Get
  19:             Return testContextInstance
  20:         End Get
  21:         Set(ByVal value As TestContext)
  22:             testContextInstance = Value
  23:         End Set
  24:     End Property
  25:  
  26: #Region "Additional test attributes"
  27:     '
  28:     'You can use the following additional attributes as you write your tests:
  29:     '
  30:     'Use ClassInitialize to run code before running the first test in the class
  31:     '<ClassInitialize()>  _
  32:     'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
  33:     'End Sub
  34:     '
  35:     'Use ClassCleanup to run code after all tests in a class have run
  36:     '<ClassCleanup()>  _
  37:     'Public Shared Sub MyClassCleanup()
  38:     'End Sub
  39:     '
  40:     'Use TestInitialize to run code before running each test
  41:     '<TestInitialize()>  _
  42:     'Public Sub MyTestInitialize()
  43:     'End Sub
  44:     '
  45:     'Use TestCleanup to run code after each test has run
  46:     '<TestCleanup()>  _
  47:     'Public Sub MyTestCleanup()
  48:     'End Sub
  49:     '
  50: #End Region
  51:  
  52:     '''<summary>
  53:     '''A test for UsuarioDAO Constructor
  54:     '''</summary>
  55:     <TestMethod()> _
  56:     Public Sub UsuarioDAOConstructorTest()
  57:         Dim target As UsuarioDAO = New UsuarioDAO()
  58:         Assert.Inconclusive("TODO: Implement code to verify target")
  59:     End Sub
  60:  
  61:     '''<summary>
  62:     '''A test for Insert
  63:     '''</summary>
  64:     <TestMethod()> _
  65:     Public Sub InsertTest()
  66:         Dim target As UsuarioDAO = New UsuarioDAO() ' TODO: Initialize to an appropriate value
  67:         Dim strCodUsu As String = String.Empty ' TODO: Initialize to an appropriate value
  68:         Dim strLogUsu As String = String.Empty ' TODO: Initialize to an appropriate value
  69:         Dim strPasUsu As String = String.Empty ' TODO: Initialize to an appropriate value
  70:         Dim expected As Boolean = False ' TODO: Initialize to an appropriate value
  71:         Dim actual As Boolean
  72:         actual = target.Insert(strCodUsu, strLogUsu, strPasUsu)
  73:         Assert.AreEqual(expected, actual)
  74:         Assert.Inconclusive("Verify the correctness of this test method.")
  75:     End Sub
  76: End Class

En el método InserTest asignaremos los valores a strCodUsu, strLogusu y strPasUsu. La variable expected (valor esperado) a TRUE. Por el momento comentamos Assert.Inconclusive

   1: <TestMethod()> _
   2: Public Sub InsertTest()
   3:     Dim target As UsuarioDAO = New UsuarioDAO() ' TODO: Initialize to an appropriate value
   4:     Dim strCodUsu As String = "001" ' TODO: Initialize to an appropriate value
   5:     Dim strLogUsu As String = "Alonso" ' TODO: Initialize to an appropriate value
   6:     Dim strPasUsu As String = "123456" ' TODO: Initialize to an appropriate value
   7:     Dim expected As Boolean = True ' TODO: Initialize to an appropriate value
   8:     Dim actual As Boolean
   9:     actual = target.Insert(strCodUsu, strLogUsu, strPasUsu)
  10:     Assert.AreEqual(expected, actual)
  11:     'Assert.Inconclusive("Verify the correctness of this test method.")
  12: End Sub

Sobre el método pulsamos el botón secundario y ejecutamos la opción RUN TEST

image

Terminado el test me muestra una ventana informando que el método paso la prueba:

image

Hasta aquí el código paso la prueba, hagamos unos cambios en el método Insert,:

image

El parámetro Pass no es el correcto, debe decir Pas. Ejecutar el Run Test,  veremos que el método no pasa la prueba:

image

Pero no me informa donde esta el problema, para ello haremos clic en la opción Debug:

 

image

Ahora si, informa sobre la excepción generada:

image

El código Assert,AreEqual evalúa el resultado del método y lo compara con el valor esperado. Aquí tienes un video en  channel9 (español) de Aurelio Porras: Código que prueba mi Código!!! con mas detalle.

http://channel9.msdn.com/Blogs/channel9spain/Pruebas-Unitarias-Unit-Testing-con-Visual-Studio

Mas información es MSDN : http://msdn.microsoft.com/es-es/library/dd293546.aspx

Saludos :)

 

Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com