C#CódigoSin CategoriaVisual Studio

Pruebas Unitarias – Servicio SOAP sobre WCF

Hola a todos!

Nuevamente estamos aquí, pero está vez para concluir con los objetivos de la entrada anterior «Desarrollando un Servicio SOAP sobre WCF» (Sí no la has visto aún, te invito a que te tomes unos minutos para leerla :D)

El objetivo que teníamos pendiente era Implementar pruebas unitarias del servicio UsuariosServices.svc

Empecemos!

Para este ejemplo, usaremos: SQL Server 2017 y Visual Studio 2017 Community (bajo C#).

Del mismo modo, continuaremos trabajando sobre la solución PeruNETDevelopment.Services.

En primer lugar, agregaremos un proyecto del tipo Prueba Unitaria el cual encontraremos en Prueba. Lo llamaremos PeruNETDevelopment.Test. (Figura 1)

(Figura 1)

Luego de crear nuestro proyecto, observaremos la siguiente estructura en la ventana del explorador de soluciones. (Figura 2)


(Figura 2)

Procedemos a eliminar la clase UnitTest1.cs, la cual es generada por default en el proyecto.

A continuación, adicionaremos un nuevo elemento del tipo Prueba Unitaria al cual llamaremos UsuariosServicesTest.cs. (Figura 3).

(Figura 3)

Editaremos el archivo UsuariosServicesTest.cs:

[TestClass]
public class UsuariosServicesTest
{
   [TestMethod]
   public void TestMethod1()
   {
   }
}

La clase de prueba debe contener:

  • El atributo [TestClass] se requiere en el marco de pruebas unitarias para código administrado de Microsoft para cualquier clase que contenga métodos de prueba unitaria que desee ejecutar en el Explorador de pruebas.
  • Cada método de prueba que desee que ejecute el Explorador de pruebas debe tener el atributo [TestMethod].

Para el caso de las pruebas unitarias se usará el siguiente formato que consta de tres partes: [Metodo]_[Escenario]_[Comportamiento].

Los test realizados son los siguientes:

  • CrearUsuario:
    • Escenario 1: Crea usuario con datos correcto.
    • Escenario 2:  Retorna mensaje de error 101, usuario ya existe.
[TestMethod]
public void CrearUsuario_DatosCorrectos_RetornaUsuarioCreado()
{
    UsuariosWS.UsuariosServicesClient proxy = new UsuariosWS.UsuariosServicesClient();
    UsuariosWS.Usuario usuarioCreado = proxy.CrearUsuario(new UsuariosWS.Usuario()
    {
        nDocumento = 70357152,
        sUsuario = "JRODRIGUEZ",
        dContraseña = "XXXXXX",
        sEstado = "A"
    });
    Assert.AreEqual(70357152, usuarioCreado.nDocumento);
    Assert.AreEqual("JRODRIGUEZ", usuarioCreado.sUsuario);
    Assert.AreEqual("XXXXXX", usuarioCreado.dContraseña);
    Assert.AreEqual("A", usuarioCreado.sEstado);
}
[TestMethod]
public void CrearUsuario_UsuarioExistente_RetornaMensajeError101()
{
 UsuariosWS.UsuariosServicesClient proxy = new UsuariosWS.UsuariosServicesClient();
 try
 {
 UsuariosWS.Usuario usuarioCreado = proxy.CrearUsuario(new UsuariosWS.Usuario()
 {
 nDocumento = 70357152,
 sUsuario = "JRODRIGUEZ",
 dContraseña = "XXXXXX",
 sEstado = "A"
 });
 }
 catch (FaultException<UsuariosWS.UsuarioException> error)
 {
 Assert.AreEqual("Error al intentar crear usuario", error.Reason.ToString());
 Assert.AreEqual(error.Detail.Codigo, "101");
 Assert.AreEqual(error.Detail.Descripcion, "El usuario ya existe");
 }
}

 

  • ObtenerUsuario:
    • Escenario 1: Obtener usuario por DNI, sí existe.
    • Escenario 2: Retorna mensaje de error 102, usuario no existe.

[TestMethod]
public void ObtenerUsuario_UsuarioExiste_RetornoDatosUsuario()
{
 UsuariosWS.UsuariosServicesClient proxy = new UsuariosWS.UsuariosServicesClient();

var usuarioRegistrado = new UsuariosWS.Usuario()
 {
 nDocumento = 70352108,
 sUsuario = "XXX",
 dContraseña = "123456",
 sEstado = "A"
 };

var usuarioConsultado = proxy.ObtenerUsuario(usuarioRegistrado.nDocumento);

Assert.AreEqual(usuarioRegistrado.nDocumento, usuarioConsultado.nDocumento);
 Assert.AreEqual(usuarioRegistrado.sUsuario, usuarioConsultado.sUsuario);
 Assert.AreEqual(usuarioRegistrado.dContraseña, usuarioConsultado.dContraseña);
 Assert.AreEqual(usuarioRegistrado.sEstado, usuarioConsultado.sEstado);
}


[TestMethod]
public void ObtenerUsuario_UsuarioNoExiste_RetornaMensajeError102()
{
 UsuariosWS.UsuariosServicesClient proxy = new UsuariosWS.UsuariosServicesClient();

try
 {
 var usuarioConsultado = proxy.ObtenerUsuario(11111111);
 }
 catch (FaultException<UsuariosWS.UsuarioException> error)
 {
 Assert.AreEqual("Error al intentar obtener usuario", error.Reason.ToString());
 Assert.AreEqual(error.Detail.Codigo, "102");
 Assert.AreEqual(error.Detail.Descripcion, "El usuario no existe");
 }
}

  • ModificarUsuario:
    • Escenario 1: Modificará usuario sí los datos son correctos.
    • Escenario 2: Retorna mensaje de error 103, estado de usuario es inactivo.
[TestMethod]
public void ModificarUsuario_DatosCorrectos_RetornaUsuarioModificado()
{
 UsuariosWS.UsuariosServicesClient proxy = new UsuariosWS.UsuariosServicesClient();
 UsuariosWS.Usuario usuarioModificado = proxy.ModificarUsuario(new UsuariosWS.Usuario()
 {
 nDocumento = 70352108,
 sUsuario = "PERSONA1",
 dContraseña = "*****",
 sEstado = "A"
 });
 Assert.AreEqual(70352108, usuarioModificado.nDocumento);
 Assert.AreEqual("PERSONA1", usuarioModificado.sUsuario);
 Assert.AreEqual("*****", usuarioModificado.dContraseña);
 Assert.AreEqual("A", usuarioModificado.sEstado);
}
[TestMethod]
public void ModificarUsuario_UsuarioInactivo_RetornaMensajeError103()
{

UsuariosWS.UsuariosServicesClient proxy = new UsuariosWS.UsuariosServicesClient();

try
 {
 UsuariosWS.Usuario usuarioModificado = proxy.ModificarUsuario(new UsuariosWS.Usuario()
 {
 nDocumento = 70352108,
 sUsuario = "PERSONA1",
 dContraseña = "*****",
 sEstado = "I"
 });
 }
 catch (FaultException<UsuariosWS.UsuarioException> error)
 {
 Assert.AreEqual("Error al intentar modificar usuario", error.Reason.ToString()); 
 Assert.AreEqual(error.Detail.Codigo, "103");
 Assert.AreEqual(error.Detail.Descripcion, "No se puede modificar usuario con estado Inactivo");
 }

}
  • EliminarUsuario:
    • Escenario 1: Eliminará un usuario existente.
    • Escenario 2: Retorna mensaje de error 104, usuario no existe.
[TestMethod]
public void EliminarUsuario_UsuarioExistente_EliminaUsuario()
{
UsuariosWS.UsuariosServicesClient proxy = new UsuariosWS.UsuariosServicesClient();
var nDocumento = 70352108;

try
{
proxy.EliminarUsuario(nDocumento);
var usuarioExiste = proxy.ObtenerUsuario(nDocumento);
}
catch (FaultException<UsuariosWS.UsuarioException> error)
{
Assert.AreEqual("Error al intentar obtener usuario", error.Reason.ToString());
Assert.AreEqual(error.Detail.Codigo, "102");
Assert.AreEqual(error.Detail.Descripcion, "El usuario no existe");
}
}
[TestMethod]
public void EliminarUsuario_UsuarioInexistente_RetornaMensajeError104()
{
 UsuariosWS.UsuariosServicesClient proxy = new UsuariosWS.UsuariosServicesClient();
 try
 {
 var nDocumento = 72297089;
 proxy.EliminarUsuario(nDocumento);
 }
 catch (FaultException<UsuariosWS.UsuarioException> error)
 {
 Assert.AreEqual("Error al intentar eliminar usuario", error.Reason.ToString());
 Assert.AreEqual(error.Detail.Codigo, "104");
 Assert.AreEqual(error.Detail.Descripcion, "No se puede eliminar, usuario no encontrado");
 }
} 

Finalmente este es el resultado de las pruebas ejecutadas: (Figura 4)

(Figura 4)

Conclusión:

  • WCF es un marco de trabajo orientado al desarrollo de aplicaciones SOA que encapsula y simplifica el desarrollo de aplicaciones distribuidas basadas en servicios.
  • Las pruebas unitarias son una herramienta que brinda eficacia y agilidad en la realización de pruebas de software.
  • Es necesario mantener la lista de pruebas de unitarias actualizada para aumentar la eficacia de la detección de errores.

Referencias:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *