Как создать утверждения тестового примера для объектов в списке объектов?

У меня 2 файла JSON. Оба имеют одинаковую структуру, содержащую список объектов. Мне нужно использовать утверждения, которые проверяют, равны ли ключи в объектах для обоих файлов JSON. Каждое свойство сопоставляется с переменной в классе Java.

Для других ключей, которые могут быть только объектами / переменными, проверка assertEquals проста, но когда дело доходит до списка объектов, я не могу найти подход.

Первый файл JSON

    "cars":[
       {
               "name" : Camry,
               "make" : Toyota
       },
       {
               "name" : Maruti 800,
               "make" : Maruti Suzuki
       }
    ]

Второй файл Json

    "cars":[
       {
               "name" : Mustang,
               "make" : Coupe
       },
       {
               "name" : Maruti 800,
               "make" : Maruti Suzuki
       }
    ]

Свойства, имя и марка считываются и сохраняются в классе CarDetails. Свойство «автомобили» хранится в классе MasterCar. Мне нужно сравнить список «автомобилей» в 1-м файле JSON с таким же во 2-м файле. В приведенном выше примере кода мне нужно иметь возможность создавать утверждения для каждого свойства в файле JSON. Например, assertEquals (file1.cars [0] .name, file2.cars [0] .name). Я могу сделать это вручную, но если список содержит, например, 50 объектов, было бы утомительно вручную создавать утверждения для нескольких объектов для каждого свойства. Я хочу знать, могу ли я перебирать списки и создавать утверждения независимо для каждого объекта в списке.


person Pavan Kailash    schedule 09.07.2019    source источник


Ответы (1)


На мой взгляд, каждый файл json представляет собой список автомобилей ... Я бы просто десериализовал файл в список. Вы имеете в виду «ключи», но не определяете, что такое ключ. В java объект может переопределить equals (), чтобы определить собственное равенство. Он также может определять hashcode (), т.е.

    public class Car(){
        private String model;
        private String make;
        public Car(String make; String model) {
          this.model =  model;
          this.make = make;
        }
       @Override
       public boolean equals(Obj obj){

          return obj instance of Car.class && 
                  make.equals(((Car)obj).getMake()) 
                  && model.equals(((Car)obj).getModel())
       }
       //override hashcode as well
        //define getters

    }

Затем вы можете в основном перебирать каждый список и проверять, содержится ли каждый в списке 1 в списке 2. т.е. использовать List.contains(obj)

Вы можете узнать больше о переопределении равенства и хэш-кода здесь. https://www.mkyong.com/java/java-how-to-overrides-equals-and-hashcode/

person Narrim    schedule 09.07.2019
comment
Ключи относятся к части пары "ключ-значение" JSON. Я работаю над переопределением. Спасибо, @Narrim. - person Pavan Kailash; 10.07.2019
comment
Ура, если вы счастливы, пожалуйста, отметьте вопрос как ответ - person Narrim; 11.07.2019