es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo probar este método en JUnit?

Escribí este método y traté de probarlo, pero los resultados no coinciden:

public static int BuscarPorNombreDeUsuario(ArrayList<account> A, String nombreDeUsuario) {
    int existe = -1;
    int longitudDeListaDeBusqueda = A.size();
    for (int i = 0; i < longitudDeListaDeBusqueda; i++) {
        if (A.get(i).getNombreDeUsuario().equalsIgnoreCase(nombreDeUsuario)) {
            existe = i;
        } else {
            existe = -1;
        }
    }
    return existe;
}

El método de prueba:

public void PruebaBuscarPorNombreDeUsuario() {
        ArrayList<account> infoDeCuenta = new ArrayList<>();
        Account usuario_1 = new Account("Sarah", "Naghi", "Sarh@hotmail.com", "0500000001", "Sarah", "Ss@12345678", 23);
        Account usuario_2 = new Account("Rawan", "Samer", "Rawan@hotmail.com", "0500000002", "RawanS", "Rr@12345678", 22);
        Account usuario_3 = new Account("Ragad", "Fahad", "Ragad@hotmail.com", "0500000003", "RagadFt", "Rr@12345678", 22);
        Account usuario_4 = new Account("Leen", "Saleh", "Leen@hotmail.com", "0500000004", "LeenS", "Ll@12345678", 23);
        infoDeCuenta.add(usuario_1);
        infoDeCuenta.add(usuario_2);
        infoDeCuenta.add(usuario_3);
        infoDeCuenta.add(usuario_4);

        // entrada válida
        String nombreDeUsuarioVálido = "Sarah";
        // entrada inválida
        String nombreDeUsuarioInválido = "Shaima";
        // prueba
        int resultadoEsperado = 0;
        int resultado = SaudiGuide.BuscarPorNombreDeUsuario(infoDeCuenta, nombreDeUsuarioVálido);
        assertEquals(resultadoEsperado, resultado);
}

¿Cómo puedo hacer una prueba en junit en el método anterior? Si alguien puede ayudarme, estaré muy agradecido.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece haber un error en el método SearchByUsername. El problema es que la variable “exists” se establece en -1 en cada iteración del bucle for. Esto significa que si el nombre de usuario no se encuentra en la primera iteración, la variable “exists” ya está establecida en -1 y el bucle no entrará en la instrucción “if” incluso si el nombre de usuario se encuentra en iteraciones posteriores.

    Para solucionar esto, la variable “exists” solo debe establecerse en -1 fuera del bucle for (para cubrir el caso cuando el nombre de usuario no se encuentra en absoluto), y dentro del bucle for solo debe establecerse en el índice actual cuando se encuentra el nombre de usuario. Además, una vez que se encuentra el nombre de usuario, el bucle debe terminar y devolver el índice de inmediato.

    Aquí está el método corregido:

    public static int searchByUsername(ArrayList<account> accounts, String username) {
        for (int i = 0; i < accounts.size(); i++) {
            if (accounts.get(i).getUsername().equalsIgnoreCase(username)) {
                return i; // nombre de usuario encontrado, devolver de inmediato su índice
            }
        }
        return -1; // nombre de usuario no encontrado
    }
    

    Para probar este método usando JUnit, puede crear una clase de prueba y agregar un método de prueba como este:

    import org.junit.Test;
    import static org.junit.Assert.*;
    
    public class AccountTest {
    
        @Test
        public void testSearchByUsername() {
            ArrayList<account> accountInfo = new ArrayList<>();
            Account user1 = new Account("Sarah", "Naghi", "sarah@hotmail.com", "0500000001", "Sarah", "Ss@12345678", 23);
            Account user2 = new Account("Rawan", "Samer", "rawan@hotmail.com", "0500000002", "RawanS", "Rr@12345678", 22);
            accountInfo.add(user1);
            accountInfo.add(user2);
    
            // Prueba con un nombre de usuario existente
            String validUsername = "Sarah";
            int expectedResult = 0;
            int result = searchByUsername(accountInfo, validUsername);
            assertEquals(expectedResult, result);
    
            // Prueba con un nombre de usuario que no existe
            String invalidUsername = "Shaima";
            int expectedAbsentResult = -1;
            int absentResult = searchByUsername(accountInfo, invalidUsername);
            assertEquals(expectedAbsentResult, absentResult);
        }
    
    }
    

    Este método de prueba primero crea un ArrayList de objetos Account y agrega dos usuarios a él. Luego prueba el método searchByUsername con un nombre de usuario válido (“Sarah”) y un nombre de usuario inválido (“Shaima”), verificando que el método devuelve los índices esperados (-1 para Shaima, 0 para Sarah).

Comments are closed.