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:
Esta ventana nos muestra la relación de las clases y métodos que se van a testear:
Una vez aceptado (OK), ingreso el nombre del proyecto de tipo Test, “Test.Ventas.Access”:
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
Terminado el test me muestra una ventana informando que el método paso la prueba:
Hasta aquí el código paso la prueba, hagamos unos cambios en el método Insert,:
El parámetro Pass no es el correcto, debe decir Pas. Ejecutar el Run Test, veremos que el método no pasa la prueba:
Pero no me informa donde esta el problema, para ello haremos clic en la opción Debug:
Ahora si, informa sobre la excepción generada:
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 :)

0 comentarios:
Publicar un comentario en la entrada