如何为对象列表中的对象创建测试用例断言?

时间:2019-07-09 12:05:32

标签: java

我有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类中。我必须将第一个JSON文件中的“汽车”列表与第二个文件中的列表进行比较。在上面的示例代码中,我需要能够为JSON文件中的每个属性创建断言。例如,assertEquals(file1.cars [0] .name,file2.cars [0] .name)。我可以手动执行此操作,但是例如,如果列表包含50个对象,则为每个属性为多个对象手动创建断言将很繁琐。我想知道是否可以遍历列表并为列表中的每个对象独立创建断言。

1 个答案:

答案 0 :(得分:0)

在我看来,每个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/