Ver Mensaje Individual
  #44 (permalink)  
Antiguo 09/05/2017, 21:33
CalgaryCorpus
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Implementar TablaHash

Los tests estan mal. En 1 prueba se prueba 1 sola cosa, si se llegara a probar mas de 1 cosa, deberian ser al menos cosas relacionadas, que colaboran entre si, que se modifican juntas, etc, pero NO cosas contradictorias.

Es raro ver, en un mismo test.
this.check(m3.size() == 4);
this.check(m3.isEmpty());

si lo primero tiene exito, lo segundo fracasara'. La prueba pasa?

O bien en otro test:

this.check(m4.size() == 4);
this.check(m4.size() == 1);

como esto puede darte buenos resultados? ejecutaste las pruebas? esta prueba pasa? Como haces para que un objeto diga que tiene 4 elementos y luego diga que tiene 1 elemento, sin haber hecho cambios y que ese test pase?

Una sugerencia: Si todas tus pruebas, dentro de una misma clase usan el mismo tipo de mapa, define un campo de ese tipo, refactoriza el codigo, creando un metodo que lo inicialice, y ese metodo lo llamas en cada test. Luego usas el objeto, ya inicializado. El codigo de tus tests se va a reducir un monton con esto. Al final de cada test borras el contenido del hash, si es necesario borrarlo, o cada vez que inicializas partes borrando todo.

En otro codigo encuentro esto:

System.out.println("\t ---PROBANDO VERIFICACIÓN CON CLAVES NULAS---");
System.out.println(" ");
this.check(col.containsKey(1));
this.check(col.containsKey(null));
this.check(col.containsKey(5));
this.check(col.containsKey(null));

suponiendo que el texto que pusiste es lo que quieres probar, para que incluyes containsKey(1) ? no estabas probando claves nulas? esperas que containsKey(null) sea true o false? la prueba parece que va a funcionar si containsKey(null) es true, es eso lo que esperas? para que lo invocas una segunda vez todo? esperas que el resultado cambie?

Otra sugerencia: Cambia tu implementacion de get(), completamente, para probar cuan bien estan tus pruebas. En la nueva implementacion, retorna siempre el mismo valor, no importa cual sea la clave que te pasan, por ejemplo, retorna "CalgaryCorpus", siempre siempre.
Aun pasan tus pruebas? Esperas que tus pruebas pasen o que fracasen?
Un hash que siempre retorna lo mismo, no importa la clave es un mal hash, de modo que las pruebas deberian detectar ese mal comportamiento.

Que tal si insertas los valores con las claves desordenadas? o que las claves sean numeros gigantescos? numeros primos? numeros pares? negativos? 0?

que pasa si insertas 2 veces el mismo par clave/valor?

que pasa si pides una clave justo despues de crear un hash?
de que tamano es un hash recien creado?

que pasa si iteras sobre un hash recien creado?
que valores esperas tener en un recorrido si has insertado 1 elemento? 2? 3? y luego, que valores esperas obtener si eliminas 1 elemento de un hash que tiene 1 elemento? que tiene 2? que tiene 3? (si borras el primero, el ultimo, el del medio)?

Las pruebas son independientes de tu implementacion. Que es lo que esperas recibir para cada accion.

Te habia dicho que no imprimas nada? que elimines los System.out.println? Sugiero que en vez de escribir, arrojes una exception y esta sea capturada y el stack trace escrito cuando la prueba fracase, en el stack trace va a estar el nombre de la funcion que fracaso. No es necesario el System.out.println, No es necesario escribir nada si la prueba pasa.

Ah! Otra cosa: Elimina los System.out.println de tus pruebas.
__________________
Visita mi perfil en LinkedIn