POO-ITBA / 2024_02

Consultas 2C 2024
2 stars 0 forks source link

Pregunta general sobre los testers #37

Open martunud opened 3 days ago

martunud commented 3 days ago

Hola, me surgio una duda. Por lo general en los testers dice que condicion tiene que pasar para que en un metodo se lance una excepcion. Mi duda es si en el tester no aparece que un metodo lanza una excepcion (que podria lanzar) entonces no lo pongo en la implementacion de la clase? Para ser mas clara aca dejo un ejemplo: El siguiente es el Tester del ejercicio 2 del recu 2C 2022


public class PasswordManagerTester {
    public static void main(String[] args) {
        // Se instancia un gestor de contraseñas. Se inicia sin bóvedas.
        PasswordManager passwordManager = new PasswordManager();

        // Agrega la bóveda "Personal" con la política de contraseñas None.
        // Si ya existe una bóveda con ese nombre no hace nada.
        passwordManager.addVault("Personal", ....................);

        // Agrega en la bóveda "Personal" el sitio web "itba.edu.ar" con su contraseña "qwerty".
        // Si ya existe una contraseña para el sitio en la bóveda, la actualiza.
        passwordManager.addPassword("Personal", "itba.edu.ar", "qwerty");

        passwordManager.addPassword("Personal", "google.com", "123");

        // Obtiene la contraseña a partir de la bóveda y el sitio web
        System.out.println(passwordManager.getPassword("Personal", "itba.edu.ar")); // qwerty

        try {
            // Si la bóveda no existe se arroja un error
            passwordManager.addPassword("Work", "github.com", "123");
        } catch (Exception ex) {
            System.out.println(ex.getMessage()); // Invalid Vault
        }

        try {
            // Si la bóveda no existe o no se agregó el sitio web a la bóveda se arroja un error
            System.out.println(passwordManager.getPassword("Personal", "github.com"));
        } catch (Exception ex) {
            System.out.println(ex.getMessage()); // Nonexistent website in vault
        }

        // Agrega una bóveda "Work" con la política de contraseñas Level1.
        passwordManager.addVault("Work", ....................);

        try {
            // Si la contraseña no cumple con la política de la bóveda se arroja un error
            passwordManager.addPassword("Work", "github.com", "123");
        } catch (Exception ex) {
            System.out.println(ex.getMessage()); // Password does not comply vault policy.
        }

        passwordManager.addPassword("Work", "github.com", "123456");
        passwordManager.addPassword("Work", "bitbucket.com", "qwerty");

        // Actualiza la política de contraseñas de la bóveda "Work" a Level2
        // Si la bóveda no existe se arroja un error
        passwordManager.changeVaultPolicy("Work", ....................);

        // Obtiene todos los sitios web de la bóveda "Work" que tengan contraseñas
        // que no cumplan con la política (producto de las contraseñas agregadas
        // con una política anterior) en orden alfabético por sitio web
        // Si no hay contraseñas que no cumplan retorna una colección vacía
        for(String invalidWebsites : passwordManager.getInvalidPasswords("Work")) {
            System.out.println(invalidWebsites);
        }
        // bitbucket.com
        // github.com

        passwordManager.changeVaultPolicy("Personal", ....................);

        // Obtiene todos los sitios web que tengan contraseñas que no cumplan
        // con la política de la bóveda correspondiente (producto de las contraseñas agregadas
        // con una política anterior) en orden alfabético por bóveda y
        // desempata alfabético por sitio web
        // Si no hay contraseñas que no cumplan retorna una colección vacía
        for(String invalidWebsites : passwordManager.getInvalidPasswords()) {
            System.out.println(invalidWebsites);
        }
        // google.com
        // bitbucket.com
        // github.com
    }
}
´´´

En este caso por ejemplo entiendo que hay que hacer dos mapas; uno es un mapa normal (con vault como clave y la politica de la contraseña como valor) y el otro un mapa de mapas (como clave vault, como clave website y como valor contraseña)
Hay un error (Invalid vault) que solo salta en addPassword, pero tambien podria saltar getPassword, pero en el tester en ningun momento aparece que ese error se lanza en ese metodo.
Mi pregunta es entonces: Asumo que con otro tester se podria lanzar el error y lo agrego o como no aparece en el tester, justo ese metodo no lanza el error? 
Espero que se pudo haber entendido, gracia!
martunud commented 3 days ago

Ah justo en este tester si dice que lanza el error si la boveda es invalida o el website, pero bueno la pregunta sigue siendo en general

fmeola commented 3 days ago

Hola @martunud Acá justo en el tester se encierra en un try catch tanto a addPassword como getPassword asi que como mínimo esos dos métodos deben lanzar excepción bajo ciertas condiciones. Si debido a la modularización que hacés hay algún método más de tu clase que también lanza excepción no hay problema. Como bien decís en otro tester y con ciertos parámetros incorrectos ese método también debería estar encerrado en un try-catch.

martunud commented 3 days ago

perfecto Franco muchas gracias!