Off Topic - Consulta

 
Vista:
sin imagen de perfil
Val: 11
Ha disminuido su posición en 2 puestos en Off Topic (en relación al último mes)
Gráfica de Off Topic

Consulta

Publicado por Iara (1 intervención) el 16/11/2020 22:09:52
Me ayudan a resolverlo. Tengo que usar el patrón state. Tengo dudas de cómo poner la clase inmueble.
16055609241224482220222542380822
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-3
Responder
Imágen de perfil de Alejandro

Cómo diseñar pruebas unitarias para un sistema inmobiliario usando el patrón State

Publicado por Alejandro (58 intervenciones) el 30/04/2026 23:13:38
Lara, para verificar que tu sistema (con State para tipo de operación) calcula bien comisiones y agrega correctamente por jurisdicción, las pruebas deben cubrir: (a) reglas de comisión por estado, (b) agregaciones de la inmobiliaria, (c) cambios de estado, (d) casos borde/validaciones.

1) Qué probar (matriz mínima)


A. Comisión por tipo de operación (State)


1. Alquiler: comisión = 2 × montoMensual
2. Venta: comisión = 2% × precioVenta

Casos recomendados:
- valores normales (ej. 150_000 mensual; 20_000_000 venta)
- valores con decimales (si usas `double/BigDecimal`)
- valores 0 (según regla de negocio: ¿permitido o no?)

B. Jurisdicción (atributo del Inmueble)


La jurisdicción no cambia la comisión en tu consigna, pero sí afecta:
- total de comisiones por jurisdicción
- conteo y filtro de operaciones por jurisdicción

C. Agregado Inmobiliaria


3. `cantidadOperaciones()` devuelve el tamaño real
4. `totalComisiones()` suma comisiones de todas las operaciones
5. `totalComisionesPorJurisdiccion(CABA/BSAS)` suma solo las que correspondan

D. Transición de estado (State)


6. Si una `Operacion` cambia de `EstadoAlquiler` a `EstadoVenta`, entonces:
- `comision()` cambia acorde al nuevo estado
- los totales cambian si recalculas (o si tu sistema guarda resultados, validar actualización)

E. Validaciones / casos borde


- contrato de alquiler con `mesesContrato <= 0` (si lo validas)
- montos negativos (si lo validas)
- inmueble/jurisdicción nulos (si lo validas)

2) Estructura sugerida de tests (JUnit 5, Java)


Regla clave: no pruebes “líneas”, prueba comportamiento.

Test 1: comisión de alquiler


1
2
3
4
5
6
7
@Test
void comisionAlquiler_esDosMeses() {
    Inmueble i = new Inmueble("Av X 123", Jurisdiccion.CABA);
    Operacion op = new Operacion(i, new EstadoAlquiler(24, 150_000));
 
    assertEquals(300_000.0, op.comision(), 0.0001);
}

Test 2: comisión de venta


1
2
3
4
5
6
7
@Test
void comisionVenta_esDosPorciento() {
    Inmueble i = new Inmueble("Calle Y 456", Jurisdiccion.BSAS);
    Operacion op = new Operacion(i, new EstadoVenta(20_000_000));
 
    assertEquals(400_000.0, op.comision(), 0.0001);
}

Test 3: cantidad de operaciones


1
2
3
4
5
6
7
8
@Test
void cantidadOperaciones() {
    Inmobiliaria inm = new Inmobiliaria();
    inm.registrar(new Operacion(new Inmueble("A", Jurisdiccion.CABA), new EstadoVenta(10_000_000)));
    inm.registrar(new Operacion(new Inmueble("B", Jurisdiccion.BSAS), new EstadoAlquiler(12, 100_000)));
 
    assertEquals(2, inm.cantidadOperaciones());
}

Test 4: total por jurisdicción


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Test
void totalComisionesPorJurisdiccion_filtraYSuma() {
    Inmobiliaria inm = new Inmobiliaria();
 
    // CABA: 2 meses de 150k = 300k
    inm.registrar(new Operacion(new Inmueble("CABA-1", Jurisdiccion.CABA), new EstadoAlquiler(24, 150_000)));
 
    // BSAS: 2% de 20M = 400k
    inm.registrar(new Operacion(new Inmueble("BSAS-1", Jurisdiccion.BSAS), new EstadoVenta(20_000_000)));
 
    // CABA: 2% de 10M = 200k
    inm.registrar(new Operacion(new Inmueble("CABA-2", Jurisdiccion.CABA), new EstadoVenta(10_000_000)));
 
    assertEquals(500_000.0, inm.totalComisionesPorJurisdiccion(Jurisdiccion.CABA), 0.0001);
    assertEquals(400_000.0, inm.totalComisionesPorJurisdiccion(Jurisdiccion.BSAS), 0.0001);
}

Test 5: total general


1
2
3
4
5
6
7
8
@Test
void totalComisiones_sumaTodo() {
    Inmobiliaria inm = new Inmobiliaria();
    inm.registrar(new Operacion(new Inmueble("1", Jurisdiccion.CABA), new EstadoAlquiler(24, 150_000))); // 300k
    inm.registrar(new Operacion(new Inmueble("2", Jurisdiccion.BSAS), new EstadoVenta(20_000_000)));     // 400k
 
    assertEquals(700_000.0, inm.totalComisiones(), 0.0001);
}

Test 6: cambio de estado (State)


1
2
3
4
5
6
7
8
9
10
11
@Test
void cambiarEstado_modificaComision() {
    Operacion op = new Operacion(
        new Inmueble("Av Z 999", Jurisdiccion.CABA),
        new EstadoAlquiler(12, 100_000)
    );
    assertEquals(200_000.0, op.comision(), 0.0001);
 
    op.setEstado(new EstadoVenta(10_000_000));
    assertEquals(200_000.0, op.comision(), 0.0001); // 2% de 10M
}

3) Buenas prácticas para que las pruebas sean confiables


- Si puedes, usa BigDecimal para dinero; si usas `double`, siempre usa `delta` en asserts.
- Separa pruebas:
- unitarias de `EstadoAlquiler/EstadoVenta` (reglas puras)
- unitarias de `Inmobiliaria` (suma/filtrado)
- integración ligera (escenario completo con varias operaciones)
- Nombra tests por intención: `totalComisionesPorJurisdiccion_filtraYSuma`.

Hallazgo final


Con State, lo más importante a validar es que `Operacion.comision()` delega correctamente al estado (Alquiler/Venta) y que la Inmobiliaria agrega bien: conteo, total general y totales por jurisdicción basados en `Inmueble.getJurisdiccion()`. Con 5–6 pruebas como las de arriba cubres prácticamente toda la consigna.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar