Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Duda con MVC, Mock y Test Unitarios...

Estas en el tema de Duda con MVC, Mock y Test Unitarios... en el foro de .NET en Foros del Web. Hola Foreros !!! Siento no haber sido más específico en el Título del tema, pero.. es que no sabía como describir el problema brevemente. Veréis, ...
  #1 (permalink)  
Antiguo 06/03/2014, 13:21
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Duda con MVC, Mock y Test Unitarios...

Hola Foreros !!!

Siento no haber sido más específico en el Título del tema, pero.. es que no sabía como describir el problema brevemente.

Veréis, tengo un repositorio que tiene un método void StartParking().

En mi Método del Controlador hago una llamada a este método, si va todo bien devuelve true, si va mal (Es decir, se genera una excepción) devuelve false.

Ahora bien... quiero hacer un Test Unitario, emulando que la llamda es correcta, y otra que la llamada es incorrecta.

La llamada correcta, CREO que la tengo bien configurada, pero.... la incorrecta no, ya que me devuelve que el test es fallido.

Por favor... a ver si alguien puede ayudarme, por que estoy aprendiendo con esto del Test y Mock y estoy un poco perdido...

Les dejo las parte de código relevantes.


Controlador:
Código:
        [HttpGet]
        public bool Start(Guid codUser, int codZone, int codVehicle)
        {

            try
            {

                this.ParkingRepository.StartParking(codUser, codZone, codVehicle);

                return true;
            }
            catch (HSoftException exHsoft)
            {

                exHsoft.InsertWay(this.GetType(), MethodBase.GetCurrentMethod());
                HSoftException.LogException(exHsoft, "ParkingController");
            }
            catch (Exception ex)
            {

                HSoftException exHsoft = new HSoftException(this.GetType(), MethodBase.GetCurrentMethod(), EnumTypeException.Page, ex);
                HSoftException.LogException(exHsoft, "ParkingController");
            }

            return false;
        }

TEST UNITARIOS
Código:
//Este primer TestMethod PARECE que lo tengo bien implementado.
        [TestMethod]
        public void Can_Start_Parking()
        {

            Mock<IParkingRepository> mockRepository = new Mock<IParkingRepository>();

            mockRepository.Setup(objSetup => objSetup.StartParking(It.IsAny<Guid>(), It.IsAny<int>(), It.IsAny<int>())).Verifiable();

            ParkingController parkingController = new ParkingController(mockRepository.Object);

            bool result = parkingController.StartParking(new Guid(), 1, 1);

            Assert.AreEqual(result, true);
        }


        [TestMethod]
        public void Not_Can_Start_Parking()
        {

            Mock<IParkingRepository> mockRepository = new Mock<IParkingRepository>();

            mockRepository.Setup(objSetup => objSetup.StartParking(It.IsAny<Guid>(), It.IsAny<int>(), It.IsAny<int>()))
                                                     .Callback((Guid guidUser, int codZone, int codVehicle) =>
                                                        {
                                                            throw new Exception();
                                                        });

            ParkingController parkingController = new ParkingController(mockRepository.Object);

            bool result = parkingController.StartParking(new Guid(), 1, 1);

            Assert.AreEqual(result, false);
        }
__________________
Charlie.
  #2 (permalink)  
Antiguo 06/03/2014, 18:04
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Duda con MVC, Mock y Test Unitarios...

RESUELTO:

Creo el MOCK en un método del tipo TestInitialize:
Código:
            this.MockParkingRepository = new Mock<IParkingRepository>();

            this.MockParkingRepository.Setup(objSetup => objSetup.StartParking(It.IsAny<Guid>(), It.IsAny<int>(), It.IsAny<int>()))
                                                                             .Callback((Guid guidUser, int codZone, int codVehicle) =>
                                                                             {
                                                                                 if (guidUser.Equals(Guid.Empty)) throw new Exception();                                                                              
                                                                             });

Y así lo uso durante el Método Test:
Código:
        [TestMethod]
        public void Can_Start_Parking()
        {

            //Preparar el Escenario
            Guid guidCorrect = new Guid("358C4B59-5403-4270-8C47-E8CD8DEEC307");
            int zone = 1;
            int vehicle = 1;

            ParkingController parkingController = new ParkingController(this.MockParkingRepository.Object);


            //Llamar a los métodos            
            bool result = parkingController.StartParking(guidCorrect, zone, vehicle);


            //Validar
            Assert.AreEqual(true, result);
        }
__________________
Charlie.

Etiquetas: mvc, test
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:21.