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.

Pepino: Afirmar valores independientemente del índice.

Estoy trabajando en la actualización de conjuntos de pruebas funcionales utilizando archivos de características de Cucumber. El problema es que mi salida es un arreglo que no está ordenado. El índice del objeto puede cambiar.

Arreglo:

    [{

        "id": "12",
        "name": "Algo"
    },
    {

        "id": "13",
        "name": "Otro algo"
    }
 ]

Aquí quiero validar el nombre cuando Id=13 solamente. Cualquier ayuda sería apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de que el array de salida no esté ordenado y encontrar el objeto con id=13 para verificar su nombre, puede seguir los siguientes pasos en su archivo de características de Cucumber:

    1. Declare un esquema de escenario con los pasos necesarios para recuperar y ordenar el array de objetos:
    Esquema de escenario: Verificar el nombre cuando Id=13
    Dado un array no ordenado de objetos
    Cuando el array se ordena por ID
    Entonces encontrar el objeto con ID=13
    
    Ejemplos:
    | # | array |
    | 1 | [{
            "id": "13",
            "name": "Otra cosa"
        },
        {
            "id": "12",
            "name": "Algo"
        }] |
    
    1. En la definición de paso para “Dado un array no ordenado de objetos”, recupere el array y guárdelo en una variable:
    @Dado("un array no ordenado de objetos")
    public void givenUnsortedArray(){
        JSONArray array = //recuperar el array de la fuente
        //almacenar el array en la variable de la clase
    }
    
    1. En la definición de paso para “Cuando el array se ordena por ID”, ordene el array por la clave “id”:
    @Cuando("el array se ordena por ID")
    public void sortArrayById(){
        //ordenar el array por la clave id
        Collections.sort(array, new Comparator<jsonobject>(){
            public int compare(JSONObject a, JSONObject b) {
                String idA = (String) a.get("id");
                String idB = (String) b.get("id");
                return idA.compareTo(idB);
            }
        });
    }
    
    1. En la definición de paso para “Entonces encontrar el objeto con ID=13”, itere a través del array ordenado y encuentre el objeto con la clave “id” igual a “13”. Una vez encontrado, verifique su valor de “nombre”:
    @Entonces("encontrar el objeto con ID=13")
    public void findObjectWithId13(){
        //iterar a través del array ordenado y encontrar el objeto con id=13
        for(JSONObject obj : array){
            String id = (String) obj.get("id");
            if(id.equals("13")){
                String name = (String) obj.get("name");
                //verificar el valor del nombre
                assertEquals("Otra cosa", name);
                return;
            }
        }
        fail("Objeto con ID=13 no encontrado");
    }
    

    Con estos pasos, debería poder recuperar y ordenar el array de objetos, encontrar el objeto con id=13 y verificar su valor de nombre, independientemente del orden de los objetos en el array.

Comments are closed.